2

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

因为SQL不允许一个表有多个类型rowversion的列,我应该如何LastUserVersionDeletedUsers表中存储?我应该使用什么数据类型?

示例代码:

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
4

2 回答 2

3

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

根据MSDN

不可为空的 rowversion 列在语义上等同于 binary(8) 列。可为空的 rowversion 列在语义上等同于 varbinary(8) 列。

因为[rowversion]column 的定义是[Version] [rowversion] NOT NULL你可以使用BINARY(8).

于 2014-06-25T19:43:12.260 回答
1

我真的没有看到保留已删除行的行版本的意义。此外,您不仅限于每个表一个 rowversion 列,您也不能插入或更新该列。

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

于 2014-06-25T19:46:34.943 回答