4

テーブルに新しいGUID/Uniqueidentifier列を追加しています。

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

また、テーブルのレコードが更新されるたびに、この列「VersionNumber」を更新したいと思います。だから私は新しいトリガーを作成します

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

しかし、NEWSEQUENTIALID()はCREATE TABLEまたはでのみ使用できることに気づきましたALTER TABLE。このエラーが発生しました

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.

これに対する回避策はありますか?

編集1:トリガーでに変更NEWSEQUENTIALID()するNEWID()とこれは解決しますが、この列にインデックスを付けているため、使用NEWID()するのは最適ではありません

4

1 に答える 1

10

特定の条件下でのみ利用可能であると言うように、次のような厄介なことを行うことができます。

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

GUID である必要がありますか? を使用するrowversionと、トリガーを必要とせずに同じ機能が得られ、インデックス作成のパフォーマンスが向上します。

于 2010-05-10T14:32:26.003 に答える