在MS SQL 2008R2上,我希望能够将消息输出捕获到变量中。我需要在许多数据库上运行脚本。捕获消息输出(来自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进行日志记录(以保持代码干净),再加上一个小的正则表达式来重构我的所有脚本。该解决方案将在明天准备就绪。非常感谢。
您可能会使用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/zh- CN/library/aa175921%28v=sql.80%29.aspx