gpt4 book ai didi

sql-server - 将 NEWSEQUENTIALID() 与 UPDATE 触发器结合使用

转载 作者:行者123 更新时间:2023-12-03 01:59:27 31 4
gpt4 key购买 nike

我正在向表中添加新的 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 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您无需触发器即可获得相同的功能以及更好的索引性能。

关于sql-server - 将 NEWSEQUENTIALID() 与 UPDATE 触发器结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2803059/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com