Sql server 从存储过程中调用存储过程并返回记录集

Sql server 从存储过程中调用存储过程并返回记录集,sql-server,tsql,Sql Server,Tsql,我有一个存储过程,可以回滚一系列操作。我想从另一个SP中调用此功能 问题在于,内部SP返回一个记录集,其中包含一个指示成功程度的值 这种方法工作得很好,在我们的环境中有一些优势,但回顾过去,我会用一个返回值或一个输出参数按常规方法来完成 我可以随时更改此SP以使用此方法并修改调用代码,但a我不想涉猎更多的代码,b在智力水平上,我很好奇是否有其他解决方案(如果有的话) 如何调用此SP并确定返回的单例记录集的值 谢谢一个存储过程像任何其他过程一样返回一个记录集,因此您实际上可以这样做: 插入到MyT

我有一个存储过程,可以回滚一系列操作。我想从另一个SP中调用此功能

问题在于,内部SP返回一个记录集,其中包含一个指示成功程度的值

这种方法工作得很好,在我们的环境中有一些优势,但回顾过去,我会用一个返回值或一个输出参数按常规方法来完成

我可以随时更改此SP以使用此方法并修改调用代码,但a我不想涉猎更多的代码,b在智力水平上,我很好奇是否有其他解决方案(如果有的话)

如何调用此SP并确定返回的单例记录集的值


谢谢

一个存储过程像任何其他过程一样返回一个记录集,因此您实际上可以这样做:

插入到MyTable中 我的价值

EXEC dbo.myStoredProcess


EXEC代替SELECT语句。要获取值,只需从插入的表中选择。通常,这是一个临时表。

另一个选项是将返回记录集的存储过程转换为返回表的函数

如果您希望最小化对系统的更改,那么Ant的方法可能是最好的


通常情况下,这种方法会使用临时表,因为不能使用exec语句插入到表变量中。

如果需要对多个记录集使用临时表,这里有一个变体

CREATE TABLE #outsidetable (...)
exec spInsideProcedure
SELECT * FROM #outsidetable
内旋侧程序

INSERT INTO #outsidetable SELECT <blah blah blah>

我尝试了Ant的方法,效果很好:

Declare @Success tinyint Declare @Response Table (Success int) Insert into @Response(Success) Exec Fix_RollbackReturn 12345, 15 Select @Success=Success from @Response 正如您所看到的,我使用了一个表变量而不是临时表,因为它比临时表稍微高效一些

谢谢你们的帮助

编辑:看来戴夫毕竟是对的。也就是说,我的Exec-into-Table变量方法在我的SQL2005开发机器上工作,但当移动到实时SQL2000机器时,它反对,所以我不得不改为临时表方法


这有点烦人,特别是在几周后我们将全面升级到SQL2005

您还可以插入临时表而不是内存中的表。所以,换句话说,你可以插入myetreable,但不能插入@myotheretreable。