【问题标题】:How to use stored procedure return value into an insert statement?如何在插入语句中使用存储过程返回值?
【发布时间】:2019-05-04 21:52:47
【问题描述】:

我有一个类似的存储过程

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 存储过程来填充我的表?

【问题讨论】:

  • 您不能从 SELECT 语句中调用存储过程...您必须使用 Execute YourStoredProcedureName
  • 这应该对你有帮助:stackoverflow.com/questions/653714/…
  • 如果要返回值,请使用 函数

标签: sql sql-server-2008 stored-procedures insert


【解决方案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);

如果要返回许多值,您最好使用输出参数或结果集。更多内容见以上链接

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 2018-08-21
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多