terça-feira, 23 de março de 2010

Diferença entre usar @@identity e scope_identity()

Em diversas fontes de informações sobre como recuperar o campo chave primária de um registro inserido em uma tabela, encontramos a sugestão de usar @@identity (Ex: SELECT @@IDENTITY AS [@@IDENTITY] GO) para recuperar o valor do campo de chave primária do registro. No entanto, este comando efetivamente recupera o identificador gerado, sem levar em consideração o contexto da inclusão, e consequentemente pode obter o identificador na tabela de replicação, dependendo do caso. Por exemplo, se o banco executar alguma operação de inclusão através de uma trigger, durante a execução do software, o retorno de @@identity estará incorreto. A utilização do comando scope_identity() sempre retornará o valor do identificador criado na tabela em que o registro foi inserido.

Exemplos:

USE AdventureWorks;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager')
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO

Nenhum comentário:

Postar um comentário