Вопрос

Я добавляю новый GUID / Unericientiledifier Column на мой стол.

ALTER TABLE table_name
ADD VersionNumber UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWSEQUENTIALID()
GO

И когда когда-либо запись обновляется в таблице, я хотел бы обновить этот столбец «Versionnumber». Так что я создаю новый триггер

CREATE TRIGGER [DBO].[TR_TABLE_NAMWE]
ON [DBO].[TABLE_NAME]
AFTER UPDATE
AS 
BEGIN 
    UPDATE TABLE_NAME
    SET VERSIONNUMBER=NEWSEQUENTIALID()
    FROM TABLE_NAME D
    JOIN INSERTED I ON D.ID=I.ID/* some ID which is used to join*/
END
GO

Но только что понял, что Newsexential () можно использовать только с CREATE TABLE или ALTER TABLE. Отказ Я получил эту ошибку

The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type 'uniqueidentifier' in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.

Есть ли обходной путь для этого?

Редактировать1: изменение NEWSEQUENTIALID() к NEWID() В триггере решается это, но я индексирую этот столбец и использую NEWID() будет субоптимальным

Это было полезно?

Решение

Как вы говорите, его только доступно в определенных условиях, вы могли бы сделать что-то противное:

DECLARE @T TABLE (G UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID())
INSERT @T OUTPUT INSERTED.G VALUES (DEFAULT) 

Это должно быть главным учреждением? Если вы используете rowversion Вы получаете ту же функциональность, не требуя спускового крючка, а также лучшую производительность индексации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top