[英]SQL Server 2008 Management Console: Automatically write results to a script and execute it
我想写一个脚本,从数据库中产生各种语句。
就像是 :
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.