Как сохранить значения версии строк в таблице, в которой уже есть столбец версий строк?
У меня есть две таблицы (Users
, DeletedUsers
) и триггер Users_Delete
, Когда удаляется запись пользователя, я хочу сохранить идентификатор и последний rowversion
значение (до того, как оно было удалено) в 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
2 ответа
Как сохранить значения версии строк в таблице, в которой уже есть столбец версий строк?
По данным MSDN:
Необнуляемый столбец обращения строк семантически эквивалентен двоичному столбцу (8). Обнуляемый столбец версии строки семантически эквивалентен столбцу varbinary(8).
Потому что определение [rowversion]
столбец [Version] [rowversion] NOT NULL
вы могли бы использовать BINARY(8)
,
Я на самом деле не вижу смысла в сохранении версии удаленной строки. Кроме того, вы не ограничены только одним столбцом версии строки на таблицу, вам также не разрешено вставлять или обновлять этот столбец.
Тем не менее, rowversion это Binary(8), так что вы можете использовать это. По сути, это число, поэтому вы можете преобразовать его в целое число, которое может быть более удобным. Для 8 байт вам понадобится bigint.