在SQL Server中是否存在等效的rowversion,但对于表?

时间:2018-02-22 11:35:29

标签: sql-server hash row versioning

我正在寻找与rowversion类似的内容,但对于整个表格:自动生成的唯一数字,可用于了解表格是否已更改。

例如:

SELECT TABLE_VERSION('FOO')
0x00000000000007D2

INSERT INTO FOO (...) VALUES (1, 'Hello world')

SELECT TABLE_VERSION('FOO')
0x00000000000007D5

它是否存在于SQL Server中?

如果没有,还有其他选择吗?允许跟踪列上更改的事情也会很棒。 我一直在考虑使用HASHBYTES,但遗憾的是它只为单个列值提供哈希值而不是整列。

1 个答案:

答案 0 :(得分:2)

在SQL Server中没有这样的东西,但是你可以使用触发器轻松实现它。我用它来协助网络应用程序的缓存失效。

首先创建表etags:

CREATE TABLE etags
(
   etag_name varchar(128) NOT NULL PRIMARY KEY,
   etag_value uniqueidentifier NOT NULL
)

Foo表插入一个值:

INSERT INTO etags VALUES ('foo', NEWID())

然后为foo表创建一个触发器,在表更改时更新etag值

CREATE TRIGGER foo_etag
ON foo FOR INSERT, UPDATE, DELETE
AS
  SET NOCOUNT ON
  UPDATE etags SET etag_value = NEWID()
  WHERE etag_name = 'Foo'