我有两个表格(Users
,DeletedUsers
)和一个触发器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
答案 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。