调用存储过程中的存储过程并返回记录集
我有一个存储过程,回滚一系列操作。我想从另一个SP中调用它。调用存储过程中的存储过程并返回记录集
问题是内层SP返回一个记录集,其中包含一个表示成功度的值。
这种方法运行良好,在我们的上下文中有一些优点,但回想起来,我会用传统的方法来完成它的返回值或输出参数。
我可能总是改变这个SP使用这种方法,并修改调用代码,但a)我不想涉足任何更多的代码比我必须,和b)在智力水平,我我很好奇,看看有什么替代解决方案,如果有的话。
如何(如果有的话)我可以调用这个SP并确定返回的单例记录集的值?
感谢
存储过程返回设置像任何其他的记录,这样你就可以真正做到这一点:
INSERT INTO MyTable的( myvalue的 )
EXEC dbo.MyStoredProcedure
EXEC代替SELECT语句。要获取该值,只需从插入的表中选择SELECT。通常情况下,这将是一个临时表。
另一种选择是将返回记录集的存储过程转换为返回表的函数。
如果您想最小化对系统的更改,Ant的方法可能是最好的。
通常情况下,您将使用该方法的临时表,因为您无法使用exec语句插入到表变量中。
这是一个变化,如果你需要将它用于MULTIPLE记录集的话,它将很好地工作。
CREATE TABLE #outsidetable (...)
exec spInsideProcedure
SELECT * FROM #outsidetable
内spInsideProcedure
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
正如你可以看到我用了一个表变量,而不是一个临时表,因为稍比临时表高效。
感谢您的帮助。
编辑:看来,戴夫是最后的权利。也就是说,我在SQL2005开发机器上使用了Exec-into-Table-variable方法,但是当它移动到它所反对的Live(SQL2000)机器时,我不得不改用临时表方法。
这有点烦人,特别是在几周之后,我们正在全面升级到SQL2005(!)。
您也可以插入临时表(不是内存表)。换句话说,你可以插入到#MyTempTable中,而不是@MyOtherTempTable。 – 2008-10-23 17:03:26