繁体   English   中英

SQL Server 2008管理控制台:自动将结果写入脚本并执行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM