相关疑难解决方法(0)

获取更新语句中的最新rowversion/timestamp值 - Sql Server

我正在使用rowversion列来处理乐观并发,并希望在我完成更新时获取新的rowversion值,以便我的数据层具有最新值,并且可以执行另一个更新并获得并发异常(除非记录有被别人更新了).

我在更新后只是在数据层中进行了操作,但这不是非常有效或完全可靠.

对于下表:

CREATE TABLE PurchaseType
(
    PurchaseTypeCode nvarchar(20) NOT NULL PRIMARY KEY CLUSTERED (PurchaseTypeCode),
    Name nvarchar(50) NOT NULL,
    TS rowversion NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

我试过了:

CREATE PROCEDURE PurchaseType_UpdateWithGet
@PurchaseTypeCode nvarchar(20),
@Name nvarchar(50),
@TS rowversion OUTPUT    
AS

UPDATE PurchaseType
SET Name = @Name
WHERE PurchaseTypeCode = @PurchaseTypeCode
 AND TS = @TS

SELECT @TS = TS FROM PurchaseType WHERE PurchaseTypeCode = @PurchaseTypeCode
GO
Run Code Online (Sandbox Code Playgroud)

但由于没有从其他人的更新获得rowverion值的可能性,并不完全满意.然后我在rowversion文档中遇到了OUTPUT语句(http://msdn.microsoft.com/en-us/library/ms182776.aspx/http://msdn.microsoft.com/en-us/library/ms177564.aspx并试过这个:

CREATE PROCEDURE PurchaseType_UpdateWithOutput
@PurchaseTypeCode nvarchar(20),
@Name nvarchar(50),
@TS rowversion OUTPUT    
AS

DECLARE @Output TABLE (TS BINARY(8)) …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server concurrency optimistic-concurrency

6
推荐指数
1
解决办法
4546
查看次数