SQL Server乐观锁定 - 返回更改的时间戳值

Seb*_*jan 3 sql t-sql stored-procedures ado sql-server-2008-r2

我有一个实现乐观锁定的更新存储过程.存储过程如下所示:

ALTER PROCEDURE [dbo].[usp_Test] 
    @Id AS char(2),
       @recordTimestamp as timestamp
       ...
BEGIN       
    UPDATE XY
           ..
          WHERE ((Id = @Id) AND (recordTimeStamp = @recordTimestamp))       

if @@rowcount = 0
begin
RAISERROR ('this row was changed by another user', 18, 1)
end

SELECT timeStamp from XY where Id = @Idend
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来返回新的时间戳?我真的想避免这个SELECT说法.

Mar*_*ith 7

假设您至少可以使用SQL Server 2005 OUTPUT

UPDATE XY
SET Col = 'foo'
OUTPUT inserted.recordTimeStamp
WHERE ((Id = @Id) AND (recordTimeStamp = @recordTimestamp))    
Run Code Online (Sandbox Code Playgroud)

或者使用表变量来更接近地镜像原始查询行为的版本.

DECLARE @Timestamp TABLE(stamp binary(8))

UPDATE XY
SET col='foo'
OUTPUT inserted.recordTimeStamp INTO @Timestamp
WHERE (Id = @Id) AND (recordTimeStamp = @recordTimestamp) 

if @@rowcount = 0
begin
RAISERROR ('this row was changed by another user', 18, 1)
end

SELECT stamp 
FROM @Timestamp
Run Code Online (Sandbox Code Playgroud)