今天碰到一个问题,存储过程嵌套:存储过程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' 

今天碰到一个问题,存储过程嵌套:存储过程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' 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-03
  • 2022-12-23
  • 2022-12-23
  • 2021-10-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
  • 2022-02-21
  • 2021-05-23
  • 2021-12-04
相关资源
相似解决方案