在 SQL Server 開發中,將複雜業務邏輯拆分為多個小型存儲過程是常見最佳實踐。但隨之而來的挑戰是:如何在存儲過程 A 中調用存儲過程 B,並捕獲 B 返回的結果集(Table)以供後續處理?
利用 INSERT INTO ... EXEC 語法,將被調用存儲過程的結果集直接插入到調用者定義的臨時表中。具體步驟如下:
#Temp)INSERT INTO #Temp EXEC UP_B 執行存儲過程 B 並捕獲結果#Temp-- 建立測試表並插入樣本數據
CREATE TABLE TestTable (ID INT);
INSERT INTO TestTable SELECT 1 UNION SELECT 2 UNION SELECT 3;
-- 存儲過程 B:返回結果集
CREATE PROCEDURE [dbo].[UP_B]
AS
BEGIN
SELECT ID, 'ComeFromB' FROM TestTable;
END;
GO
-- 存儲過程 A:調用 B 並捕獲結果
CREATE PROCEDURE [dbo].[UP_A]
AS
BEGIN
CREATE TABLE #Temp (ID INT, Msg VARCHAR(30));
INSERT INTO #Temp EXEC UP_B;
SELECT * FROM #Temp;
END;
GO
-- 執行驗證
EXEC [UP_A];
GO
