本文介绍了SQL Server乐观锁定-返回更改的时间戳记值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have an update stored procedure that implements optimistic locking. The stored procedure looks like this:

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

返回新时间戳的更简单方法?我真的很想避免使用 SELECT 语句。

Is there a simpler way to return the new timestamp? I would really like to avoid the SELECT statement.

推荐答案

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

Assuming at least SQL Server 2005 you can use OUTPUT

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

或者使用表变量的版本

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

这篇关于SQL Server乐观锁定-返回更改的时间戳记值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 23:02