使用NEWSEQUENTIALID()与更新触发
-
25-09-2019 - |
题
我加入一个新的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 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