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.