Есть ли эквивалент SQL-версии в SQL Server, но для таблицы?

Я ищу что-то похожее на rowversion, но для всей таблицы: автоматически генерируется уникальный номер, который можно использовать, чтобы узнать, изменилась ли таблица.

Например:

SELECT TABLE_VERSION('FOO')
0x00000000000007D2

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

SELECT TABLE_VERSION('FOO')
0x00000000000007D5

Существует ли он в SQL Server?

Если нет, есть ли альтернатива? Что-то, что позволяет отслеживать изменения в столбце, тоже было бы здорово. Я думал об использовании HASHBYTES, но, к сожалению, он дает хэш только для значения одного столбца, а не для всего столбца.

1 ответ

Решение

В 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'
Другие вопросы по тегам