UPDATEトリガーでNEWSEQUENTIALID()を使用して
-
25-09-2019 - |
質問
私は私のテーブルに新しい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.
回避策は、このためにありますか?
EDIT1:トリガーにNEWSEQUENTIALID()
にNEWID()
を変更すると、これを解決するが、私はこのコラムをインデックス化し、NEWID()
を使用していますでしょう次善
解決
あなたが特定の条件下でそののみ利用可能と言うように、あなたのような厄介な何かを行うことができます:
DECLARE @T TABLE (G UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID())
INSERT @T OUTPUT INSERTED.G VALUES (DEFAULT)
それはGUIDでなければなりませんか?あなたは、使用している場合は rowversion
あなたはトリガとしてを必要とせずに同じ機能を取得するよく、より良いインデックスのパフォーマンスなど。
所属していません StackOverflow