Tive problemas com a instrução @@IDENTITY, para retornar a PRIMARY KEY de um registro inserido, na execução de Stored Procedure.
Identifiquei as seguintes alternativas:
para SQL Server versões 2000 ou superior.
“Instruções SQL que estão contidos no mesmo lote, Stored Procedure ou Trigger são considerados no mesmo escopo. Então, se eu chamar um INSERT
que aciona um gatilho, eu tenho dois âmbitos diferentes: âmbito de aplicação 1 está dentro do lote que chamado de INSERT
e escopo dois está dentro da trigger.”
SELECT @@IDENTITY
Esta é a função favorita de todos, sem alteração de versões anteriores do SQL Server. É esta uma Função favorita de Todos, sem alteração Anteriores de versões do SQL Server. Ele retorna o valor de identidade último produzido em uma ligação, independentemente do quadro que produziu o valor, independentemente do âmbito de aplicação da declaração de que o valor produzido. Ele retorna uma ÚLTIMA IDENTITY Produzido em valor Uma Conexão, independentemente do valor o Quadro Que produziu, independentemente do Âmbito de Aplicação da DECLARAÇÃO de Produzido Que o valor.
SELECT IDENT_CURRENT ('TableName')
Esta nova função retorna o último valor de identidade produzidos em uma tabela, independentemente da ligação que criou o valor, independentemente do âmbito de aplicação da declaração de que o valor produzido. Esta nova Função retorna o ultimo valor IDENTITY Produzido em Uma tabela, independentemente da Ligação Que Criou o valor, independentemente do Âmbito de Aplicação da DECLARAÇÃO de Produzido Que o valor.
SELECT SCOPE_IDENTITY()
Esta nova função retorna o último valor de identidade produzidos em uma ligação e de uma declaração no mesmo âmbito, independentemente do quadro que produziu o valor. Esta nova Função retorna o ultimo valor IDENTITY Produzido em Conexão Uma e Uma DECLARAÇÃO No mesmo âmbito, independentemente do valor o Quadro Que produziu. Sugira uma tradução melhor.
Considerando as tabelas:
1 2 3 |
CREATE TABLE YakName (ID int IDENTITY(1,1), YakName varchar(30)) CREATE TABLE YakTracker (ID int IDENTITY(1000,1), TranType char(1), YakName varchar(30)) GO |
Podemos obter o IDENTITY com as seguintes instruções:
1 2 3 4 5 6 7 |
CREATE TRIGGER tI_Yak ON YakName FOR INSERT AS BEGIN INSERT YakTracker (TranType, YakName) SELECT 'I',YakName FROM inserted END GO |
fonte: Mark em SQL Team.com