首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对UPDATE触发器使用NEWSEQUENTIALID()

对UPDATE触发器使用NEWSEQUENTIALID()
EN

Stack Overflow用户
提问于 2010-05-10 21:48:28
回答 1查看 2.2K关注 0票数 4

我正在向我的表中添加一个新的GUID/Uniqueidentifier列。

代码语言:javascript
复制
ALTER TABLE table_name
ADD VersionNumber UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWSEQUENTIALID()
GO

当表中的记录被更新时,我想要更新列"VersionNumber“。所以我创建了一个新的触发器

代码语言:javascript
复制
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一起使用。我得到了这个错误

代码语言:javascript
复制
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()作为次优选择

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-10 22:32:26

正如你所说的,它只在某些条件下可用,你可以做一些糟糕的事情,比如:

代码语言:javascript
复制
DECLARE @T TABLE (G UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID())
INSERT @T OUTPUT INSERTED.G VALUES (DEFAULT) 

它必须是GUID吗?如果使用rowversion,则无需触发器即可获得相同的功能,并且具有更好的索引性能。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2803059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档