如何将MSSQL PRINT输出存储到变量

时间:2012-05-10 20:55:27

标签: sql sql-server sql-server-2008

在MS SQL 2008 R2上,我希望能够将消息输出捕获到变量中。我需要在许多数据库上运行脚本。捕获消息输出(来自print或raiserror的消息)并将其记录到表中。我需要从存储过程内部执行此操作。

对于此脚本

Declare @sqlscript nvarchar(500)

Set @sqlscript = 
'select * from sys.objects
raiserror (''My raised error'', 10,1)
select * from sys.schemas
print ''my print'''

EXEC sp_executesql @sqlscript

我想得到

My raised error    
my print

(60 row(s) affected)  
My raised error

(21 row(s) affected)  
my print

更新
我已决定采用@rs建议。登录表对我来说是最简单的方法。使用SP记录(以保持代码清洁),再加上一个小的正则表达式来重构我的所有脚本。解决方案将为明天做好准备。非常感谢。

1 个答案:

答案 0 :(得分:2)

你可能会使用CLR和类似的技术:

http://blogs.msdn.com/b/mattm/archive/2007/09/13/capture-print-messages-from-a-stored-procedure.aspx

但最好的选择是将EXEC放入一个只有一个varchar列的临时表中:

http://msdn.microsoft.com/en-us/library/aa175921%28v=sql.80%29.aspx