从 sp_executesql 中获取多个结果

Get multiple results from 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

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

背景:

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

编辑:经过长时间的讨论,解决了这个问题: Syntax check all stored procedures?

--如果对讨论感兴趣,请阅读本文和评论...

你的方法闻起来像个很糟糕的主意...

您可以想到一个 table "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')