Question

Je suis ajouter une nouvelle colonne GUID / Uniqueidentifier à ma table.

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

Et si jamais un enregistrement est mis à jour dans le tableau, je voudrais mettre à jour cette colonne « VersionNumber ». Je crée donc un nouveau déclencheur

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

Mais se rendit compte que NEWSEQUENTIALID () ne peut être utilisé avec ou CREATE TABLE ALTER TABLE. Je suis cette erreur

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.

Y at-il une solution de contournement pour cela?

Edit1: Changement NEWSEQUENTIALID() à NEWID() dans la gâchette permet de résoudre, mais j'indexation cette colonne et en utilisant NEWID() serait sous-optimal

Était-ce utile?

La solution

Comme vous le dites son seul disponible sous certaines conditions, vous pourriez faire quelque chose de méchant comme:

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

Doit-il être un GUID? si vous utilisez un rowversion vous obtenez la même fonctionnalité sans avoir besoin d'un TRIGGER ainsi que de meilleures performances d'indexation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top