本文介绍了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乐观锁定-返回更改的时间戳记值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!