Sql server SQL Server 2008管理控制台:自动将结果写入脚本并执行它
我想写一个脚本,从数据库中生成各种语句 比如:Sql server SQL Server 2008管理控制台:自动将结果写入脚本并执行它,sql-server,sql-server-2008,sql-server-2008-r2,ssms,Sql Server,Sql Server 2008,Sql Server 2008 R2,Ssms,我想写一个脚本,从数据库中生成各种语句 比如: select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ; 我想在一个新文件中自动收集这些语句的所有输出,然后执行这个文件。这可能吗 重要提示:输出当然应该没有标题,没有任何其他错误/成功、消息等 在最佳情况下,所有必要的选项都应该在脚本本身中设置,而不是在用户界面中设置它们。您想要这样的东西吗 如果只想打印脚本,请使用osql和类似的脚本 DECLARE @sche
select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ;
我想在一个新文件中自动收集这些语句的所有输出,然后执行这个文件。这可能吗
重要提示:输出当然应该没有标题,没有任何其他错误/成功、消息等
在最佳情况下,所有必要的选项都应该在脚本本身中设置,而不是在用户界面中设置它们。您想要这样的东西吗 如果只想打印脚本,请使用
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执行脚本,请使用此脚本(不推荐)
你想要这样的东西吗 如果只想打印脚本,请使用
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 @sql NVARCHAR(MAX)
SELECT @sql =
COALESCE(@sql + CHAR(13), '') +
'DROP TABLE ['+ name + ']'
FROM sys.objects
WHERE [type] = 'T'
执行
EXEC(@sql)
然后将其打印到消息窗口
PRINT @sql
最后,进入“消息”窗口,右键单击它,选择“结果另存为…”,另存为类型>所有文件,然后像myfile.sql一样写入文件名
编辑
我永远不会,永远不会在没有事务的情况下自动执行这样的事情。我宁愿从消息窗口保存一个脚本,打开它,检查它,然后执行。首先,创建动态脚本,类似于
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一样写入文件名
编辑
我永远不会,永远不会在没有事务的情况下自动执行这样的事情。我宁愿从消息窗口保存一个脚本,打开它,检查它,然后执行。Hm看起来很不错,但是可以在那里输入文件名吗?另外,是否可以在编写脚本后立即执行脚本?Hm看起来很不错,但是否可以在那里输入文件名?此外,是否可以在编写脚本之后立即执行脚本?您应该使用
sys.tables
,这样就不需要任何类型=…
说明符。顺便说一句:type='T'
是错误的-它应该是type='U'
(U
,如user table
)-但正如我所提到的-如果您使用从sys.tables
选择名称,那么您不需要记住那些棘手的细节…执行动态脚本然后将其保存到文件有什么错?这可以通过将所有内容收集到变量中,将该变量打印到SSMS消息窗口,使用exec执行该变量,最后保存消息中的输出脚本来实现。您好,您能帮我举个例子吗?也许这对你来说是“简单的”,但对我来说不是:-)。为了澄清我现在做的事情:在菜单中,我选择“查询结果到文件”。然后启动脚本,我需要输入一个文件名。脚本完成后,我打开文件,手动删除“----”和“17行”,然后执行新脚本。我想进一步实现自动化,即不需要输入文件名,也不需要手动清理。您应该使用sys.tables
,这样您就不需要任何类型=…
说明符。顺便说一句:type='T'
是错误的-它应该是type='U'
(U
,如user table
)-但正如我所提到的-如果您使用从sys.tables
选择名称,那么您不需要记住那些棘手的细节…执行动态脚本然后将其保存到文件有什么错?这可以通过将所有内容收集到变量中,将该变量打印到SSMS消息窗口,使用exec执行该变量,最后保存消息中的输出脚本来实现。您好,您能帮我举个例子吗?也许这对你来说是“简单的”,但对我来说不是:-)。为了澄清我现在做的事情:在菜单中,我选择“查询结果到文件”。然后启动脚本,我需要输入一个文件名。脚本完成后,我打开文件,手动删除“----”和“17行”,然后执行新脚本。我想进一步实现自动化,即无需输入文件名,无需手动清理。非常感谢,现在更好地理解这一点。实际上,“EXEC”部分执行生成的DROP语句,因此这非常危险。我希望先将语句打印到文件中,然后执行此文件。但是,PRINT命令是否可以在脚本中的某个位置设置文件名,而不是手动保存文件?据我所知,这是不可能的。也许使用了一些SQLCMD模式的黑客,但我不太喜欢它。不过你可以试试这个:非常感谢,现在更好地理解这个。实际上,“EXEC”部分执行生成的DROP语句,因此这非常危险。我希望先将语句打印到文件中,然后执行此文件。但是,PRINT命令是否可以在脚本中的某个位置设置文件名,而不是手动保存文件?据我所知,这是不可能的。也许使用了一些SQLCMD模式的黑客,但我不太喜欢它。您可以尝试以下方法: