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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top