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 TABLEor一起使用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()将是次优的

4

1 回答 1

10

正如您所说,它仅在某些条件下可用,您可以做一些讨厌的事情,例如:

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

它必须是GUID吗?如果您使用 arowversion您可以获得相同的功能而无需触发器以及更好的索引性能。

于 2010-05-10T14:32:26.003 回答