Есть ли эквивалент 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'