今天碰到一個問題,存儲過程嵌套:存儲過程ProcC里嵌套ProcB,ProcB里嵌套ProcA,執行ProcC時就報錯“INSERT EXEC 語句不能嵌套”;
下面這個方法可以解決問題:
CREATE PROCEDURE ProcA
AS
SELECT '123456'
GO
--執行成功
EXEC ProcA
CREATE PROCEDURE ProcB
AS
DECLARE @table TABLE(SN nvarchar(500))
INSERT INTO @table
EXEC ProcA
GO
--執行成功
EXEC ProcB
CREATE PROCEDURE ProcC
AS
DECLARE @table TABLE(SN nvarchar(500))
INSERT INTO @table
EXEC ProcB
GO
--執行失敗 “INSERT EXEC 語句不能嵌套”
EXEC ProcC
******只需要把ProcC里的insert into @table 改寫成 set @Sql='INSERT INTO @table' 就解決了,如果還有存儲過程ProcD嵌套ProcC,也只需要ProcD的insert
ALTER PROCEDURE ProcC
AS
DECLARE @table TABLE(SN nvarchar(500))
DECLARE @Sql nvarchar(2000)
SET @Sql='INSERT INTO @table'
EXEC ProcB
GO
--執行成功
EXEC ProcC
SET @Sql='INSERT INTO @table'