1

我想编写一个脚本,从数据库中生成各种语句。

就像是 :

select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ;

我想在一个新文件中自动收集这些语句的所有输出,然后我想执行这个文件。这可能吗 ?

重要提示:输出当然应该没有标题,也没有任何其他错误/成功、消息等。

在最佳情况下,所有必要的选项都应该在脚本本身中设置,而不是在用户界面中设置。

4

2 回答 2

4

首先,您创建动态脚本,例如...

DECLARE @sql NVARCHAR(MAX)  
SELECT @sql = 
     COALESCE(@sql + CHAR(13), '') + 
     'DROP TABLE ['+ name + ']' 
FROM sys.objects 
WHERE [type] = 'T'

执行那个...

EXEC(@sql)

然后将其打印到消息窗口...

PRINT @sql

最后转到消息窗口,右键单击它,选择“将结果另存为...”,另存为类型>所有文件,并写下您的文件名,如 myfile.sql

编辑

我永远不会,在没有交易的情况下自动执行这样的事情。我宁愿从消息窗口中保存一个脚本,打开它,查看它然后执行。

于 2013-06-20T11:26:43.333 回答
2

你想要这样的东西吗?

如果您只想打印脚本使用osql和类似这样的脚本

DECLARE @schema VARCHAR(255)
DECLARE @table VARCHAR(255)

DECLARE PrintOutputCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT [TABLE_SCHEMA], [TABLE_NAME]
    FROM INFORMATION_SCHEMA.TABLES
OPEN PrintOutputCursor
FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
WHILE @@FETCH_STATUS = 0 BEGIN
    PRINT 'DROP TABLE ['+ @schema + '].[' + @table + '];'
    FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
END
CLOSE PrintOutputCursor
DEALLOCATE PrintOutputCursor

如果要osql使用此脚本执行脚本(不推荐)

DECLARE @schema VARCHAR(255)
DECLARE @table VARCHAR(255)
DECLARE @exec VARCHAR(4000)

DECLARE PrintOutputCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT [TABLE_SCHEMA], [TABLE_NAME]
    FROM INFORMATION_SCHEMA.TABLES
OPEN PrintOutputCursor
FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
WHILE @@FETCH_STATUS = 0 BEGIN
    SET @exec = 'DROP TABLE ['+ @schema + '].[' + @table + '];'
    -- Uncomment the following to execute the dynamic statement
    -- EXEC (@exec)
    FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
END
CLOSE PrintOutputCursor
DEALLOCATE PrintOutputCursor
于 2013-06-20T10:54:53.533 回答