Microsoft SQL Server 2005 从返回多个表的子过程插入表
Posted
技术标签:
【中文标题】Microsoft SQL Server 2005 从返回多个表的子过程插入表【英文标题】:Microsoft SQL Server 2005 Inserting into tables from child procedure which returned multiple tables 【发布时间】:2010-04-16 14:32:32 【问题描述】:我有一个子过程,它返回的不仅仅是表格。
孩子:
PROCEDURE KevinGetTwoTables
AS BEGIN
SELECT 'ABC' Alpha, '123' Numeric
SELECT 'BBB' Alpha, '123' Numeric1, '555' Numeric2
END
示例:
PROCEDURE KevinTesting
AS BEGIN
DECLARE @Table1 TABLE (
Alpha varchar(50),
Numeric1 int
)
DECLARE @Table2 TABLE (
Alpha varchar(50),
Numeric1 int,
Numeric2 int
)
--INSERT INTO @Table1
EXEC KevinGetTwoTables
END
【问题讨论】:
在这里打个问号,否则人们会吓坏的。 【参考方案1】:您将无法在父过程中捕获两个结果集,就像您将一个结果集捕获到临时表中一样。但是,还有其他几种选择。阅读优秀文章How to Share Data Between Stored Procedures by Erland Sommarskog。
如果您使用的是 SQL Server 2008,请查看Table Parameters and Table Types 部分。您可以将表作为输出参数传递回父级。
如果您不在 SQL Server 2008 上,请查看section on Sharing a Temp Table。
您基本上在父过程中创建两个#TempTables,在子过程中填充每个#TempTables 并终止子过程。当您返回父过程时,每个#TempTable 中都有数据。
【讨论】:
【参考方案2】:据我所知,没有办法在 T-SQL 中捕获第二个结果集。
您可以通过CLR stored procedure 进行操作。
【讨论】:
如果不能更改子过程,使用 CLR 很好:sommarskog.se/share_data.html#CLR以上是关于Microsoft SQL Server 2005 从返回多个表的子过程插入表的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft SQL Server 2005 函数,传递开始和结束时间列表
问:卸载microsoft sql server 2005 backward compatibility的方法
Microsoft SQL Server 2005 从返回多个表的子过程插入表