代码之家  ›  专栏  ›  技术社区  ›  ram

将newSequentialID()与update触发器一起使用

  •  3
  • ram  · 技术社区  · 16 年前

    我正在向表中添加新的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 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.
    

    有解决办法吗?

    Eddi1:改变 NEWSEQUENTIALID() NEWID() 在触发器中解决了这个问题,但我正在索引此列并使用 NWID() 会是次优的

    1 回复  |  直到 16 年前
        1
  •  9
  •   Alex K.    16 年前

    正如你所说,它只在特定条件下可用,你可以做一些讨厌的事情,比如:

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

    它必须是一个guid吗?如果你使用 rowversion 在不需要触发器和更好的索引性能的情况下,您可以获得相同的功能。

    推荐文章