首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 存儲過程巢狀調用:在存儲過程中執行另一存儲過程並獲取結果集

     編輯:關於SqlServer

背景與問題

在 SQL Server 開發中,將複雜業務邏輯拆分為多個小型存儲過程是常見最佳實踐。但隨之而來的挑戰是:如何在存儲過程 A 中調用存儲過程 B,並捕獲 B 返回的結果集(Table)以供後續處理?

核心解決方案

利用 INSERT INTO ... EXEC 語法,將被調用存儲過程的結果集直接插入到調用者定義的臨時表中。具體步驟如下:

  1. 在存儲過程 A 中建立結構匹配的臨時表(#Temp)
  2. 使用 INSERT INTO #Temp EXEC UP_B 執行存儲過程 B 並捕獲結果
  3. 後續邏輯直接查詢臨時表 #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

關鍵點總結

  • 臨時表結構必須與被調用存儲過程返回的列數、類型、順序完全一致
  • 此方法適用於返回單一結果集的場景
  • 若被調用過程返回多個結果集,僅第一個會被捕獲

執行結果示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved