【发布时间】:2020-12-26 13:00:23
【问题描述】:
我想通过调用存储过程来创建一个临时表,如下所示
Select *
into #temp1
from
exec sp1;
或
select *
into #temp1
from sys.dm_exec_describe_first_result_set_for_object(object_id('dbo.sp1'), 1)
获取第二个结果集
我知道稍后选项仅用于获取第一个结果集。但我想获取第 n 个结果集并直接从中创建一个临时表,而不定义临时表。
我的最终目标是使用 tSQLt 测试用例将来自 SP 的第二个结果集的列数据类型与我预期的表模式进行比较。所以定义实际表和预期表没有意义。每次都会过去。
【问题讨论】:
-
"我们如何动态创建临时表......而不定义临时表。" ?????
-
感谢@SMor 在上面的链接中,它建议使用 SQLCLR。我还没有深入研究它。但它肯定说要在 SQL 服务器窗口之外编码。我的最终目标是编写一个 tSQLt 测试用例,我将在其中定义一个临时表定义并比较我的 proc 的第二个结果集的模式。所以在这种情况下,我无法定义临时表。否则测试用例没有意义。
-
T-SQL 本身不支持从存储过程中分离数据集。听起来你应该有 2 个程序。
-
也许更好的问题是为什么您(或您组织中的某个人)决定编写存储过程来生成多个结果集。这首先是设计/编写“工作单元”的一种有问题的方法 - 显然 tsql 不是为了处理而设计的。
标签: sql sql-server tsqlt