3
我正在向表中添加一個新的GUID/Uniqueidentifier列。使用NEWSEQUENTIALID()更新觸發器
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()
將是次優的
+1 rowversion(又名時間戳):) – Nate 2010-05-10 14:35:20
+1很不幸,確實 - 但'NEWSEQUENTIALID()'只能作爲列的DEFAULT值 - 似乎是相同的2008 R2,也: - ( – 2010-05-10 14:50:42
微軟在8年內沒有觸及過這個問題;這是一個諷刺,當你試圖修改一個以newsequentialid()作爲默認值的表時,SSMS 2012仍然會拋出驗證列的錯誤,這些變通辦法包括創建臨時表,一個獨特的ID是不可接受的,儘管這可能是迄今爲止最好的解決方法。 – Triynko 2013-11-02 00:42:17