从另一个过程调用存储过程

时间:2018-07-21 05:19:57

标签: sql sql-server stored-procedures exec

使用此表变量:

DECLARE @ReturnValue VARCHAR
DECLARE @OUT_MAIN_ERROR VARCHAR
DECLARE @Result VARCHAR(50)

BEGIN
    DECLARE @TableVariable TABLE (result VARCHAR(50))

    INSERT INTO @TableVariable  
        EXEC [dbo].[DRIVEPOOL2]

    SELECT result 
    FROM @TableVariable
END

使用临时表:

DECLARE @ReturnValue VARCHAR
DECLARE @OUT_MAIN_ERROR VARCHAR
DECLARE @Result VARCHAR(50)

BEGIN
    CREATE TABLE #kola(result VARCHAR(50))

    INSERT INTO #kola  
        EXEC [dbo].[DRIVEPOOL2]

    SELECT * 
    FROM #kola

    DROP TABLE #kola
END

我收到错误消息:

  

信息8164,级别16,状态1,过程DRIVEPOOL2,第45行[批处理开始第3行]
  INSERT EXEC语句不能嵌套。

我已经尝试过使用临时表和表变量,它们都抛出了无法嵌套INSERT EXEC语句的错误。

Drive Pool Procedure for Reference - Github

1 个答案:

答案 0 :(得分:0)

似乎与此线程重复:INSERT EXEC Statement cannot be nested

  

在调用存储过程并插入   将存储过程的结果存储到表或表变量中(INSERT   ... EXECUTE),并且正在调用的存储过程已经包含一个   在其主体中插入... EXECUTE语句。

在此处详细了解此错误:http://www.sql-server-helper.com/error-messages/msg-8164.aspx

您可以尝试OPENROWSET来解决此问题

INSERT INTO @TableVariable ( col1, col2, col3,... )
SELECT SP.*
FROM OPENROWSET('SQLNCLI', '[Your connection string]','EXECUTE [dbo].[DRIVEPOOL2]') AS SP