我将一个程序结果“返回”到另一个程序时遇到问题。
说明
例如,我们将复杂的SELECT与参数放在一个过程中。
USE [myDB]
GO
ALTER PROCEDURE dbo.Procedure1 @today date
AS
SELECT * FROM complex_query
现在它返回了很多列,列数和行数取决于 @today 值。
不,我想在 Procedure2
中使用 Procedure1 的结果USE [myDB]
GO
DECLARE @cntMonth INT = 0;
WHILE @cntMonth < 12
BEGIN
SELECT x,y,z FROM result_of_Procedure1
SET @cntMonth = @cntMonth + 1;
END;
为什么我要这样呢? 这是因为我正在处理的软件是连接到DB,运行程序并将结果输出到前端。所以我必须在SQL中一直编码 因此,假设软件正在进行一次性连接,我不希望每次执行 WHILE 语句时都通过 Procedure1 。如何存储Procedure1的效果,以便在循环过程中通过Procedure2使用它,并防止多次运行Procedure1?
答案 0 :(得分:3)
CREATE TABLE #TempResults
(
-- put definition of columns returned from your Procedure1 SP here
)
INSERT INTO #TempResults
EXEC Procedure1
-- now you have your result from Procedure1 in #TempResults
-- use it whatever way you want
SELECT * FROM #TempResults
-- finally drop the temp table when no longer needed
DROP TABLE #TempResults