我正在使用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)