【发布时间】:2012-05-11 18:31:47
【问题描述】:
在 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 记录(以保持代码干净),加上一个小的正则表达式来重构我的所有脚本。解决方案将在明天准备就绪。非常感谢。
【问题讨论】:
-
在你的 exec 语句后检查
@@error,@@rowcount例如:SELECT @@rowcount -
在 sp_executesql 之后,@@error 和 @@rowcount 都为 0,因为最后一个语句是打印。它只会给我最后一条语句的信息,而不是执行的整个脚本。
-
你能用插入表格代替打印吗?将
print 'my print'替换为insert into logtable (msg) values ('print') -
是的,我可以用日志表或我要附加的 nvarchar(max) 变量替换打印。但是我有大约 75 个脚本,我希望不必重构它们。 :D Plus 使用 Print 是跟踪的标准。我可以改变我的习惯,它的团队会更不愿意改变。
-
@rs:你应该用你的评论来回答,这样他才能接受。
标签: sql sql-server sql-server-2008