如何在insert语句中使用存储过程返回值



我有一个类似的存储过程

CREATE PROCEDURE GetSerial (@param1 int, @param2 int)
AS
BEGIN
-- do some insert/updates, so I can't use function
DECLARE @value AS int;
SET @value = 3;
return @value;
END

现在我声明一个表变量

DECLARE @Serials AS TABLE 
(
ID int,
Value int
)

现在我想像一样填满这张表

INSERT INTO @Serials (ID, Value)
SELECT 1, GetSerial(1,2) -- *How can I call this?

那么,有人能帮助我如何在SELECT语句中调用GetSerial存储过程来填充我的表吗?

我建议您避免陷入这种模式/思维,因为存储过程只返回int,而这些int实际上是用来描述操作的效果,而不是操作的结果/数据。示例:0=>失败,1=>成功。Not GetAgeInYears((=>29

https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/return-data-from-a-stored-procedure?view=sql-server-2017有很多信息和具体的例子,但在您的特定情况下,您需要执行过程并将结果代码捕获到变量中,然后插入:

DECLARE @ret INT;
EXEC @ret = GetSerial(1,2);
INSERT INTO @Serials VALUES(1, @ret);

实际上,如果要返回许多值,那么最好使用输出参数或结果集。请参阅以上链接了解更多

最新更新