Pergunta

Estou adicionando uma nova coluna GUID/UniqueIdentifier à minha tabela.

ALTER TABLE table_name
ADD VersionNumber UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWSEQUENTIALID()
GO

E sempre que um registro é atualizado na tabela, eu gostaria de atualizar esta coluna "VersionNumber". Então eu crio um novo gatilho

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

Mas apenas percebi que o recém -sequencialID () só pode ser usado com CREATE TABLE ou ALTER TABLE. Eu recebi este erro

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.

Existe uma solução alternativa para isso?

Edit1: Mudando NEWSEQUENTIALID() para NEWID() no gatilho resolve isso, mas estou indexando esta coluna e usando NEWID() seria sub-ideal

Foi útil?

Solução

Como você diz que está disponível apenas sob certas condições, você pode fazer algo desagradável como:

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

Tem que ser um GUID? Se você usa um rowversion Você obtém a mesma funcionalidade sem precisar de um gatilho e melhor desempenho de indexação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top