Sql server 调用两级存储过程

Sql server 调用两级存储过程,sql-server,stored-procedures,Sql Server,Stored Procedures,在SQL Server 2014中,我有两个存储过程。一个使用INSERT命令调用另一个 我想调用上层存储过程来获取它的结果表。但是,我得到一个错误: Msg 213,16级,状态7,程序HelloWorld,第23行 提供的值的列名或数目与表定义不匹配 这是我完整代码的一个示例: 第一个存储过程: ALTER PROCEDURE [dbo].[HelloWorld_2] @aaa VARCHAR(20) AS BEGIN SELECT 1 AS col1, @aaa AS co

在SQL Server 2014中,我有两个存储过程。一个使用
INSERT
命令调用另一个

我想调用上层存储过程来获取它的结果表。但是,我得到一个错误:

Msg 213,16级,状态7,程序HelloWorld,第23行
提供的值的列名或数目与表定义不匹配

这是我完整代码的一个示例:

第一个存储过程:

ALTER PROCEDURE [dbo].[HelloWorld_2]
    @aaa VARCHAR(20)
AS
BEGIN
    SELECT 1 AS col1, @aaa AS col2
END
第二个存储过程(它调用第一个存储过程)

我需要执行的SQL(它调用第二个存储过程)

返回值必须是一个包含3列和1行的表。但这个错误出现了:

提供的值的列名或数目与表定义不匹配


但是,临时表的列顺序和值是正确的…

感谢所有回复


最后,我创建了一个“HelloWorld_2”函数,以便存储过程“HelloWorld”和SQL代码正常工作。

我无法复制该错误(),我得到
Msg 8164 Level 16 State 1第6行INSERT EXEC语句不能嵌套。
;这是你无法修复的。这看起来像是XY问题。SQL不是过程语言,所以这样的调用堆栈充其量也有问题。你想做什么?@Brian,好吧,我正在尝试使用我已经创建的一些现有SP。我们在生产中同时使用这两个SP,因此我不想修改它们,也不想创建另一个SP。正如@Larnu所说,SQL Server已经受到了限制。在这种情况下,我通常会在顶级过程中创建一个
#Temp
表,在您的案例中-
HelloWorld
,并利用它调用的过程在您的案例中可以看到它这一事实。然而,你必须大量地记录这类事情
ALTER PROCEDURE [dbo].[HelloWorld]
    @aaa VARCHAR(20)
AS
BEGIN
    DECLARE @temp TABLE(col1 INT, col2 VARCHAR(20))

    INSERT INTO @temp
        EXEC [HelloWorld_2] @aaa

    SELECT *, 'patata' 
    FROM @temp
END
DECLARE @temp TABLE(col1 INT, col2 VARCHAR(20), col3 VARCHAR(20))

INSERT INTO @temp
    EXEC HelloWorld 3