Função de busca de valores de identificação no SQL SERVER 2000 No SQL Server 2000, a coluna identidade é definida por IDENTITY, e o seguinte está relacionado à obtenção do valor identidade do último registro inserido
Uma ilustração de exemplo da função de desligado
No SQL Server, você pode usar SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() para obter o valor do último registro inserido, e a diferença entre eles é: SCOPE_IDENTITY() retorna o último valor IDENTITY inserido dentro da coluna IDENTITY no mesmo escopo. Um escopo é um módulo – procedimentos armazenados, gatilhos, funções
Números ou lotes. Portanto, se duas instruções estão no mesmo procedimento armazenado, função ou lote, elas estão no mesmo escopo. @@IDENTITY Retorna o último valor de identificação gerado em todas as tabelas da sessão atual IDENT_CURRENT() retorna o último valor de identificação gerado para a tabela especificada em qualquer sessão e qualquer escopo Aqui está um exemplo para ilustrar as diferenças entre eles
-- a) Código de exemplo -- =========================================== -- Criar uma tabela de teste -- =========================================== USE tempdb VAI
CRIAR TABELA T1(id int IDENTIDADE, col int) INSERIR T1 SELECT 1 UNIÃO TODOS SELECIONAM 2 CRIAR TABELA T2(id int IDENTIDADE, col int) VAI
CRIAR TR_insert_t2 TRIGGER NO T2 PARA INSERT COMO INSERIR T1 SELECT 3 VAI
-- =========================================== -- Testar três funções: 1 -- =========================================== INSERIR VALORES T2(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(O número de linhas afetadas é 1 linha) --*/ VAI
-- =========================================== -- Testar três funções: 2 -- =========================================== INSERIR VALORES T1(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(O número de linhas afetadas é 1 linha) --*/ VAI
-- =========================================== -- Testar três funções: 3 -- ** Abra uma nova conexão e execute o seguinte código ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 & n
--=========================================== -- Excluir o ambiente de teste -- =========================================== TABELA DE DESCIDA T1,T2
-- b) Descrição do resultado do código Como você pode ver no código acima: IDENT_CURRENT() sempre retorna o último valor identificado inserido na tabela especificada @@IDENTITY Retorna o valor de identidade da sessão atual, esteja no mesmo escopo ou não, nos testes 1 e 2, pode-se ver que retorna o valor de identidade do registro inserido no trigger, e em
No Teste 3, NULL é retornado porque não há registro de inserção na sessão atual SCOPE_IDENTITY() retorna o valor de identificação do mesmo escopo da sessão atual, então no teste 1, 2, retorna o valor que não é afetado pelo gatilho, e no teste 3, porque a sessão atual não é interpolada
record, então retorna NULL
|