Fonte: Internet Autor: Desconhecido
- Criar bancos de dados e tabelas
criar banco de dados MyDataBase
use MyDataBase
criar tabela mytable
id int identidade(1,1),
nome Varchar(20)
)
--Execute este SQL para descobrir o valor da coluna auto-incremental correspondente ao registro que acabou de ser inserido
inserir nos valores da minha tabela ('Li Si')
selecione @@identity
2. Comparação dos três métodos
No SQL Server 2000, existem três recursos semelhantes: SCOPE_IDENTITY, IDENT_CURRENT e @@IDENTITY, todos retornando valores inseridos na coluna IDENTITY.
IDENT_CURRENT Retorna o último valor de identificação gerado para uma tabela específica em qualquer sessão e escopo. IDENT_CURRENT Não limitado pelo escopo e pela sessão, mas por uma tabela especificada. IDENT_CURRENT retorna o valor gerado para uma tabela específica em qualquer sessão e escopo.
@@IDENTITY Retorna o último valor de identificação gerado para qualquer tabela em todos os escopos da sessão atual.
SCOPE_IDENTITY retorna o último valor identificado que foi gerado para a sessão atual e qualquer tabela no escopo atual
SCOPE_IDENTITY e @@IDENTITY retornam o último valor de identificação gerado em qualquer tabela da sessão atual. No entanto, SCOPE_IDENTITY retorna apenas valores inseridos no escopo atual; @@IDENTITY Não se limita a um escopo específico.
Por exemplo, existem duas tabelas, T1 e T2, nas quais um gatilho INSERT é definido. Quando uma linha é inserida em T1, o gatilho é acionado e uma linha é inserida em T2. Este exemplo ilustra dois endoscópios: um em T1 e outro em T2 como resultado do gatilho.
Assumindo que tanto T1 quanto T2 tenham colunas IDENTITY, @@IDENTITY e SCOPE_IDENTITY retornarão valores diferentes ao final da instrução INSERT em T1.
@@IDENTITY Retorna o último valor da coluna IDENTITY inserido em qualquer escopo na sessão atual, que é o valor inserido em T2.
SCOPE_IDENTITY() retorna o valor IDENTITY inserido em T1, que é o último INSERT que ocorreu no mesmo escopo. Se a função SCOPE_IDENTITY() for chamada antes que a instrução de inserção para a coluna identidade ocorra no escopo, a função retorna um valor NULL.
Os valores retornados por IDENT_CURRENT('T1') e IDENT_CURRENT('T2') são, respectivamente, os últimos valores auto-incrementais das duas tabelas.
Experimento do AJQC: (40 threads locais, 40+40 threads remotas simultâneamente testando simultaneamente, inserindo linhas de 1200W), a conclusão é:
1. Em aplicações típicas em cascata. @@IDENTITY não podem ser usados, e conflitos simultâneos ocorrerão quando 1W for multi-row em máquinas CII850 e 256M SD. Em P42.8C e 512M DDR, há um conflito simultâneo quando há apenas mais de 6000 linhas.
2.SCOPE_IDENTITY() é absolutamente confiável e pode ser usado no processo de armazenamento, mesmo gatilhos não precisam ser construídos, e não há conflitos simultâneos
SELECT IDENT_CURRENT('TableName') - Retorna o último valor do rótulo gerado na tabela especificada
SELECT IDENT_INCR('TableName') - retorna o valor de incremento marcado do campo para a tabela especificada
SELECT IDENT_SEED('TableName') - retorna o valor da semente marcada do campo da tabela especificada
Retorna o número automático do último registro inserido
SELECT IDENT_CURRENT('NomeTabel')
Voltar ao próximo número automático:
SELECT IDENT_CURRENT('NomeTabel')+(SELECT IDENT_INCR('NomeMesa'))
SELECT @@IDENTITY - Retorna o último valor marcado que foi gerado em todas as tabelas da sessão atual
|