我加入一个新的GUID /唯一标识符列到我的表。

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 TABLEALTER 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 你会得到相同的功能,而不需要一个触发作为以及更好的索引性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top