【问题标题】: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 的任何问题。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

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

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

    【讨论】:

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

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

    【讨论】:

    • 感谢您的回答,但为什么我需要使用char 而不是varchar?是为了性能还是其他原因?这是我第一次使用 SQL Server。
    • @TimeToCode,是的,它是为了性能。由于您的内容是固定的(仅 1 个字符),您将获得更好的性能。见stackoverflow.com/questions/1885630/…
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多