gpt4 book ai didi

sql - 如何将存储过程的多个输出抓取到临时表中

转载 作者:行者123 更新时间:2023-12-01 19:35:45 25 4
gpt4 key购买 nike

我的存储过程返回两个输出。我想在另一个存储过程中使用其中一个。因此尝试获取临时表中的第二个输出。但由于两个输出的结构不同,因此我总是得到“列名称或提供的值的数量与表定义不匹配。”

即使我更改输出的顺序(第一个输出第二个,第二个输出第一个),它也不起作用。

我正在建立一个全新的应用程序,我需要在另一个存储过程中一次又一次地使用该存储过程。如果我遇到这种情况,可能我需要重写很多代码。

有一个非常好的问题,但这仅涵盖一个输出。

Insert results of a stored procedure into a temporary table

谢谢

最佳答案

如果不修改存储过程,您就不能这样做。

在 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

关于sql - 如何将存储过程的多个输出抓取到临时表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com