utilizzando NEWSEQUENTIALID () con UPDATE trigger
-
25-09-2019 - |
Domanda
Io sono l'aggiunta di una colonna nuova GUID / Uniqueidentifier al mio tavolo.
ALTER TABLE table_name
ADD VersionNumber UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWSEQUENTIALID()
GO
E quando mai un record viene aggiornato nella tabella, vorrei aggiornare questa colonna "VersionNumber". Così ho creato un nuovo trigger
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
Ma si rese conto che NEWSEQUENTIALID () può essere utilizzato solo con CREATE TABLE
o ALTER TABLE
. Ho ottenuto questo errore
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.
C'è una soluzione per questo?
Edit1: Cambiare NEWSEQUENTIALID()
per NEWID()
nel trigger risolve questo, ma sto indicizzare la colonna e utilizzando NEWID()
sarebbe subottimale
Soluzione
Come dici tu la sua disponibili solo in determinate condizioni, si potrebbe fare qualcosa di sgradevole come:
DECLARE @T TABLE (G UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID())
INSERT @T OUTPUT INSERTED.G VALUES (DEFAULT)
Essa non deve essere un GUID? se si utilizza un rowversion
si ottiene la stessa funzionalità senza bisogno di un trigger così come una migliore prestazioni di indicizzazione.