如何使用存储过程的返回值插入插入语句?

时间:2018-12-03 15:12:18

标签: sql sql-server-2008 stored-procedures 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存储过程来填充我的表?

1 个答案:

答案 0 :(得分:1)

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

https://docs.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);

真的,如果您有许多要返回的值,最好使用输出参数或结果集。有关更多信息,请参见上面的链接