我面临的情况是我需要在另一个存储过程中使用一个存储过程的结果。我的第一个存储过程返回一个表的子集,我想在第二个存储过程中使用它。
exec dbo.myprcedure param
返回结果,但我需要在另一个存储过程中捕获它。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用view而不是存储过程。视图可以包含表中的选定数据。首先创建一个视图,然后在存储过程中调用视图
或
创建临时表。从临时表中可以获取数据
答案 1 :(得分:0)
如果只返回一个结果集,则可以创建临时表,然后使用语法
INSERT INTO #tmp
EXEC dbo.myprocedure @param
请参阅https://stackoverflow.com/a/14623262/8479
但总的来说,最好找到一种不同的方法,例如使用table-valued variables或使用函数而不是proc。
答案 2 :(得分:0)
在你内部执行第一个存储过程Secod存储过程并在那里使用结果。像
这样的东西CREATE PROCEDURE Proc_2
@param
AS
BEGIN
SET NOCOUNT ON;
/* Create a Temp Table here say #TempTable*/
INSERT INTO #TempTable
exec dbo.myporcedure @param
/* Your rest of the code that needs to work with the result set of dbo.myporcedure */
END
答案 3 :(得分:0)
只需在FUNCTION
或STORED PROCEDURE
中返回TABLE VARIABLE,然后在调用者存储过程中使用TABLE VARIABLE
进行进一步处理,或者将其传递给另一个存储过程作为TABLE VARIABLE参数。
即。创建一个函数,如下所示返回一个TABLE VARIABLE。
CREATE PROCEDURE MyProcedureThatReturnsATable()
RETURNS @ReturnTable TABLE
(
-- specify columns returned by the proc here
ID INT NOT NULL,
Name nvarchar(255) NOT NULL
)
AS
BEGIN
.
..
...
--This select returns data
INSERT INTO @ReturnTable
SELECT ID, Name FROM SOME_TABLES
RETURN
END
然后在父存储过程中,您将执行上面的存储过程并在该父存储过程中填充TABLE变量,如下所示。
DECLARE @MyParentTableVariable as TABLE (ID INT, Name nvarchar(255))
INSERT INTO @MyParentTableVariable
EXECUTE MyProcedureThatReturnsATable
现在,在父存储过程中,您可以获得TABLE VARIABLE中MyProcedureThatReturnsATable
的数据。