在 SQL 服务器中是否有等效的 rowversion,但对于 table?
Is there an equivalent of rowversion in SQL Server, but for a table?
我正在寻找类似于 rowversion 的东西,但对于整个 table :一个自动生成的唯一编号,可用于了解 table 是否已更改。
例如:
SELECT TABLE_VERSION('FOO')
0x00000000000007D2
INSERT INTO FOO (...) VALUES (1, 'Hello world')
SELECT TABLE_VERSION('FOO')
0x00000000000007D5
它是否存在于 SQL 服务器中?
如果没有,还有其他选择吗?允许跟踪列更改的东西也很棒。
我一直在考虑使用 HASHBYTES,但不幸的是它只为单个列值而不是整个列提供哈希值。
SQL服务器中没有这样的东西,但是你可以用触发器轻松实现它。我用它来帮助网络应用程序的缓存失效。
首先创建 table etags:
CREATE TABLE etags
(
etag_name varchar(128) NOT NULL PRIMARY KEY,
etag_value uniqueidentifier NOT NULL
)
为 Foo
table 插入一个值:
INSERT INTO etags VALUES ('foo', NEWID())
然后为 foo
table 创建一个触发器,当 table 改变时更新 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'
我正在寻找类似于 rowversion 的东西,但对于整个 table :一个自动生成的唯一编号,可用于了解 table 是否已更改。
例如:
SELECT TABLE_VERSION('FOO')
0x00000000000007D2
INSERT INTO FOO (...) VALUES (1, 'Hello world')
SELECT TABLE_VERSION('FOO')
0x00000000000007D5
它是否存在于 SQL 服务器中?
如果没有,还有其他选择吗?允许跟踪列更改的东西也很棒。 我一直在考虑使用 HASHBYTES,但不幸的是它只为单个列值而不是整个列提供哈希值。
SQL服务器中没有这样的东西,但是你可以用触发器轻松实现它。我用它来帮助网络应用程序的缓存失效。
首先创建 table etags:
CREATE TABLE etags
(
etag_name varchar(128) NOT NULL PRIMARY KEY,
etag_value uniqueidentifier NOT NULL
)
为 Foo
table 插入一个值:
INSERT INTO etags VALUES ('foo', NEWID())
然后为 foo
table 创建一个触发器,当 table 改变时更新 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'