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给该参数?
根据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)