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

时间:2016-11-08 00:50:58

标签: sql sql-server stored-procedures

我有一个名为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并在第二个存储过程中使用它。

关于评论的任何问题。

2 个答案:

答案 0 :(得分:3)

执行存储过程时以及定义存储过程时,需要指定OUTPUT

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

答案 1 :(得分:1)

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