从另一个执行存储过程,并返回两个变量

Posted

技术标签:

【中文标题】从另一个执行存储过程,并返回两个变量【英文标题】:Execute a stored procedure from another, and return two variables 【发布时间】:2017-03-21 12:10:09 【问题描述】:

我有一个名为clients 的存储过程,它有3 个参数:第一个用于用户输入,最后两个是OUTPUT 参数。

这是代码:

CREATE PROCEDURE clients
     (@name NVARCHAR(100),
      @id_client int OUTPUT,
      @messg varchar(1) OUTPUT)
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
    BEGIN TRAN
        IF NOT EXISTS (SELECT name FROM client WHERE name = @name)
        BEGIN
            INSERT INTO client(name) VALUES (@name);

            SET @id_client = SCOPE_IDENTITY();
            SET @messg = 'o'

            COMMIT TRAN
        END
        ELSE
        BEGIN
            SELECT @id_client = id_client 
            FROM client 
            WHERE name = @name;

            SET @messg = 'o'

            COMMIT TRAN
        END
    END TRY
    BEGIN CATCH
        SET @messg = 'e'
        ROLLBACK TRAN
    END CATCH
END

我需要从另一个调用这个存储过程,第二个被称为updateS,我正在尝试以下操作:

CREATE PROCEDURE updateS
     (@clientname VARCHAR(100))
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @id INT;
    DECLARE @msg VARCHAR(1);

    EXEC clients @clientname, @id, @msg; --Problem here to retrieve the id
END

此存储过程有一个客户端名称的参数,但我需要检索客户端的 id,但它不起作用,因为我正在尝试。

基本上我需要获取 id 并在第二个存储过程中使用它。

关于 cmets 的任何问题。

【问题讨论】:

【参考方案1】:

您需要在执行存储过程以及定义它时指定OUTPUT

EXEC clients @clientname, @id OUTPUT, @msg OUTPUT;

【讨论】:

哦!这正是我所需要的。非常感谢。【参考方案2】:

您在将参数传递给存储过程时是否错过了output 关键字?此外,我会更改clients 存储过程并将参数设置为char(1),而不是像@messg char(1) OUTPUT

【讨论】:

感谢您的回答,但为什么我需要使用char 而不是varchar?是为了性能还是其他原因?这是我第一次使用 SQL Server。 @TimeToCode,是的,它是为了性能。由于您的内容是固定的(仅 1 个字符),您将获得更好的性能。见***.com/questions/1885630/…

以上是关于从另一个执行存储过程,并返回两个变量的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从另一个存储过程调用存储过程

如何使用多个输出参数执行存储过程?

如何执行存储过程

在 Oracle 中从另一个存储过程调用一个存储过程

ORACLE存储过程里可以声明过程和函数吗

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,