如何将 OUTPUT DELETED 的结果分配给输出参数?

Jon*_*ood 1 sql t-sql sql-server output-parameter

我有以下查询,可生成下一个可用的提单号。

ALTER PROCEDURE [dbo].[GetNextTruckBol]
    @FacilityId INT,
    @Count INT = 1
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE Facilities
    SET NextTruckBol = NextTruckBol + @Count
    OUTPUT DELETED.NextTruckBol
    WHERE Id = @FacilityId
END
Run Code Online (Sandbox Code Playgroud)

但现在我需要修改它,以便将结果值分配给OUTPUT参数。

我知道如何声明OUTPUT参数。如何将 的值分配OUTPUT DELETED.NextTruckBol给该参数?

Mar*_*ith 6

根据UPDATE文档

可以在 UPDATE 语句中使用变量名来显示受影响的旧值和新值,但这仅应在 UPDATE 语句影响单个记录时使用。如果 UPDATE 语句影响多条记录,要返回每条记录的旧值和新值,请使用 OUTPUT 子句。

因此,如果您知道UPDATE只会影响最多一行(因为Id被限制为唯一)并且您不想弄乱表变量,则可以使用

SET @variable = column, column = expression,它将变量设置为列的更新前值。

那么那就是

CREATE OR ALTER PROCEDURE [dbo].[GetNextTruckBol]
    @FacilityId INT,
    @Count INT = 1,
    @NextTruckBol INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE Facilities
    SET @NextTruckBol = NextTruckBol,
        NextTruckBol = NextTruckBol + @Count
    WHERE Id = @FacilityId
END
Run Code Online (Sandbox Code Playgroud)