unico new generar sql-server sql-server-2008 triggers guid newsequentialid

sql server - generar - utilizando NEWSEQUENTIALID() con ACTUALIZAR desencadenador



uniqueidentifier null sql server (1)

Estoy agregando una nueva columna GUID / Uniqueidentifier a mi tabla.

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

Y cuando se actualice un registro en la tabla, me gustaría actualizar esta columna "VersionNumber". Entonces creo un nuevo disparador

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

Pero me acabo de dar cuenta de que NEWSEQUENTIALID () solo se puede usar con CREATE TABLE o ALTER TABLE . Recibí este error

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.

Hay una solución para esto ?

Edit1: Cambiar NEWSEQUENTIALID() a NEWID() en el desencadenador soluciona esto, pero estoy indexando esta columna y usar NEWID() sería subóptimo


Como dice que solo está disponible bajo ciertas condiciones, podría hacer algo desagradable como:

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

¿Tiene que ser un GUID? si usa una rowversion obtiene la misma funcionalidad sin necesidad de un desencadenador, así como un mejor rendimiento de indexación.