Frage

Ich füge eine neue GUID / Uniqueidentifier Spalte an meinen Tisch.

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

Und wann immer ein Datensatz in der Tabelle aktualisiert wird, würde ich diese Spalte „Version“ aktualisieren möchten. Also habe ich einen neuen Trigger erstellen

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

Aber gerade erkannt, dass NEWSEQUENTIALID () kann nur mit CREATE TABLE oder ALTER TABLE verwendet werden. Ich habe diesen Fehler

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.

Gibt es eine Abhilfe für dieses?

Edit1: Ändern NEWSEQUENTIALID() zu NEWID() im Trigger löst dieses Problem, aber ich bin der Indizierung dieser Spalte und NEWID() Verwendung wäre suboptimal

sein
War es hilfreich?

Lösung

Wie Sie sagen, dass es nur unter bestimmten Bedingungen, können Sie etwas tun könnten böse wie:

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

Hat es eine GUID sein? wenn Sie ein verwenden rowversion erhalten die gleiche Funktionalität ohne einen Trigger zu benötigen als auch eine bessere Indizierung Leistung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top