Sql server 调用两级存储过程
在SQL Server 2014中,我有两个存储过程。一个使用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
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