我的存储过程返回两个输出。我想在另一个存储过程中使用其中一个。所以试图在临时表中获取第二个输出。但由于两个输出的结构不同,因此我总是得到“列名或提供的值的数量与表定义不匹配”。
即使我改变了输出的顺序(第一个输出第二个,第二个输出第一个),它也不起作用。
我正在建立一个全新的应用程序,我需要再次使用存储过程并在另一个存储过程中再次使用。如果我遇到这种情况,可能我需要重写很多代码。
有一个非常好的问题,但这仅涵盖一个输出。
谢谢
我的存储过程返回两个输出。我想在另一个存储过程中使用其中一个。所以试图在临时表中获取第二个输出。但由于两个输出的结构不同,因此我总是得到“列名或提供的值的数量与表定义不匹配”。
即使我改变了输出的顺序(第一个输出第二个,第二个输出第一个),它也不起作用。
我正在建立一个全新的应用程序,我需要再次使用存储过程并在另一个存储过程中再次使用。如果我遇到这种情况,可能我需要重写很多代码。
有一个非常好的问题,但这仅涵盖一个输出。
谢谢
你不能,不能不修改存储过程。
在 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
如果不能修改程序,你不走运。 更正:正如 HABO 所指出的,您可以使用 CLR 来迭代结果集。有关详细信息,请参阅下面的链接。如果您知道自己在做什么,并且别无选择,那还不错。
有关在存储过程之间共享数据的更多详细信息,请参阅 Erland Sommarskog 的这篇非常全面的文章:http: //www.sommarskog.se/share_data.html