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