如何在已具有rowversion列的表中存储rowversion值?

时间:2014-06-25 19:25:59

标签: sql-server rowversion

我有两个表格(UsersDeletedUsers)和一个触发器Users_Delete。删除用户记录时,我想在rowversion表中存储id和最后DeletedUsers值(删除之前)。

因为SQL不允许在表上使用多个rowversion类型的列,所以我应该如何将LastUserVersion存储在DeletedUsers表中?我应该使用什么数据类型?

示例代码:

CREATE TABLE [dbo].[Users] (
    [ID] [uniqueidentifier] NOT NULL,
    [Name] [nvarchar](100) NOT NULL,
    [Version] [rowversion] NOT NULL
)

CREATE TABLE [dbo].[DeletedUsers] (
    [ID] [uniqueidentifier] NOT NULL,
    [LastUserVersion] [rowversion] NOT NULL,    -- ERROR
    [Version] [rowversion] NOT NULL
)

CREATE TRIGGER [dbo].[Users_Delete] ON [dbo].[Users]
    AFTER DELETE
    AS
    BEGIN
    SET NOCOUNT ON

    INSERT INTO [dbo].[DeletedUsers]
    (
        ObjectID,
        LastUserVersion
    )
    SELECT
        ObjectID,
        Version
    FROM DELETED
    SET NOCOUNT OFF
    END

2 个答案:

答案 0 :(得分:3)

  

如何在已有的表中存储rowversion值   rowversion专栏?

根据MSDN

  

不可存活的rowversion列在语义上等同于a   二进制(8)列。可空的rowversion列是语义上的   相当于varbinary(8)列。

由于[rowversion]列的定义为[Version] [rowversion] NOT NULL,您可以使用BINARY(8)

答案 1 :(得分:1)

我真的没有看到保留已删除行的rowversion的重点。此外,您不仅限于每个表一个rowversion列,也不允许您插入或更新该列。

那就是说,rowversion是Binary(8),所以你可以使用它。基本上,它是一个数字,所以你可以将它转换为一个更方便的整数。对于8字节,你需要bigint。