从sp_executesql获取多个结果



请看下面的语句:

CREATE TABLE TableA (A INT)
CREATE TABLE TableB (B INT, C INT)
DECLARE @stmt NVARCHAR(MAX) = 'SELECT * FROM TableA; SELECT * FROM TableB'
EXEC sp_executesql @stmt

语句生成两个表的输出。是否可以将结果插入到两个临时表中,而不是输出结果集?或者(更好的)完全忽略结果?

背景:

我正在编写一些通用代码来检查存储过程的"编译错误":它执行所有读取存储过程并检查是否出现任何错误(例如缺少列或不可能的执行计划)。因此,在现实中,@stmt将包含对存储过程的调用(存储过程不能拆分为两个单独的语句)。这工作得很好,但我不喜欢代码输出超过100个表的事实…

编辑:经过长时间的讨论,解决了这个问题:语法检查所有存储过程?

——如果对讨论感兴趣,请阅读这篇文章并发表评论…

你的方法闻起来像一个非常糟糕的主意…

你可以考虑一个表"CompileErrors",其中包含SessionID, SessionDate和一个XML列"Results"。

您的SP可以通过在末尾添加" for XML AUTO"轻松地将所有SELECT结果(每次调用一行)插入到该XML列中。

使用"FOR XML PATH"可以详细控制输出。

比较一下这两个:

SELECT TOP 10 [name],object_id,schema_id,[type] 
FROM sys.objects 
FOR XML AUTO, ROOT('objects')
SELECT TOP 10  object_id AS [@object_id]
              ,schema_id AS [@schema_id]
              ,[type] AS [@type]
              ,[name]
FROM sys.objects 
FOR XML PATH('object'),ROOT('objects')

相关内容

  • 没有找到相关文章

最新更新