我想编写一个脚本,从数据库中生成各种语句。
就像是 :
select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ;
我想在一个新文件中自动收集这些语句的所有输出,然后我想执行这个文件。这可能吗 ?
重要提示:输出当然应该没有标题,也没有任何其他错误/成功、消息等。
在最佳情况下,所有必要的选项都应该在脚本本身中设置,而不是在用户界面中设置。
我想编写一个脚本,从数据库中生成各种语句。
就像是 :
select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ;
我想在一个新文件中自动收集这些语句的所有输出,然后我想执行这个文件。这可能吗 ?
重要提示:输出当然应该没有标题,也没有任何其他错误/成功、消息等。
在最佳情况下,所有必要的选项都应该在脚本本身中设置,而不是在用户界面中设置。
首先,您创建动态脚本,例如...
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
编辑
我永远不会,在没有交易的情况下自动执行这样的事情。我宁愿从消息窗口中保存一个脚本,打开它,查看它然后执行。
你想要这样的东西吗?
如果您只想打印脚本使用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