我的存储过程返回我的两个输出。 我想用其中一人在另一个存储过程。 因此,试图抓住一个临时表中的第二输出。 但由于的输出都为不同的结构,有前我总是得到“列名或所提供值不匹配表定义的数量。”
即使我改变输出(第一输出第二和第二输出第一)的顺序,它不工作。
我将建立一个全新的应用程序,我需要再次在另一个存储过程中再次使用存储过程中的d。 如果我遇到这种情况,可能是我需要重写很多代码。
有一个非常好的问题,但这仅涵盖一个输出。
插入存储过程的结果到一个临时表
谢谢
我的存储过程返回我的两个输出。 我想用其中一人在另一个存储过程。 因此,试图抓住一个临时表中的第二输出。 但由于的输出都为不同的结构,有前我总是得到“列名或所提供值不匹配表定义的数量。”
即使我改变输出(第一输出第二和第二输出第一)的顺序,它不工作。
我将建立一个全新的应用程序,我需要再次在另一个存储过程中再次使用存储过程中的d。 如果我遇到这种情况,可能是我需要重写很多代码。
有一个非常好的问题,但这仅涵盖一个输出。
插入存储过程的结果到一个临时表
谢谢
你不能,不能没有修改存储过程。
在SQL Server中,你只能插入第一个结果集的存储过程到另一个表,通过INSERT...EXEC
。 列数和位置必须精确匹配,和INSERT...EXEC
不能嵌套,即不能从PROC1插入在PROC2一个表,然后从PROC2插入表中PROC3。 所以INSERT...EXEC
是一个完全不令人满意的解决方案。
解决方法是修改插入结果到主叫范围,例如所定义的临时表的过程:
create proc get_some_data as
insert #temp1 (col1, col2) select col1, col2 from table1
insert #temp2 (colA, colB) select colA, colB from table2
go
create table #temp1 (col1 int, col2 int)
create table #temp2 (colA int, colB int)
exec get_some_data
select * from #temp1
select * from #temp2
drop table #temp1
drop table #temp2
go
如果你不能修改程序, 你的运气了。 更正 :为哈勃好心指出的那样,你可以使用CLR遍历结果集。 详情请参阅以下链接。 不是太糟糕了,如果你知道自己在做什么,并没有其他选择。
有关存储过程之间共享数据的详细信息,请参阅厄兰Sommarskog这个非常全面的文章: http://www.sommarskog.se/share_data.html