Razão para usar @@ identidade em vez de SCOPE_IDENTITY

votos
11

Em um banco de dados SQL Server 2005, um dos nossos colaboradores remotos verifiquei apenas em uma mudança para um procedimento armazenado que mudou um SCOPE_IDENTITY select para select @@ identidade. Você sabe de quaisquer motivos pelos quais você pode usar @@ identidade ao longo SCOPE_IDENTITY?

Publicado 09/12/2008 em 18:11
fonte usuário
Em outras línguas...                            


5 respostas

votos
18

@@IDENTITYirá retornar o último valor de identidade emitido pela sessão atual. SCOPE_IDENTITY()retorna o último valor de identidade na sessão atual e mesmo escopo. Eles são geralmente os mesmos, mas assumem um gatilho é chamado que inseriu algo em algum lugar pouco antes da declaração atual. @@IDENTITYirá retornar o valor de identidade pela INSERT IGNORE declaração do gatilho, não a instrução de inserção do bloco. É geralmente um erro a menos que saiba o que está fazendo.

Respondeu 09/12/2008 em 18:17
fonte usuário

votos
12

Aqui está um link que pode ajudar a diferenciá-los

parece:

  • IDENTIDADE - última identidade na conexão
  • SCOPE_IDENTITY - última identidade que você explicitamente criado (exclui desencadeia)
  • IDENT_CURRENT ( 'tablename') - Última identidade na tabela, independentemente do escopo ou conexão.
Respondeu 09/12/2008 em 18:20
fonte usuário

votos
2

Eu não consigo pensar em nenhum, a menos que houvesse um gatilho depois inserido uma linha (ou algo assim) e eu realmente queria que o ID dessa linha inserida-trigger em vez da linha I fisicamente alterado.

Em outras palavras, não, não realmente.

  • IMPORTANTE: Não é um especialista em T-SQL :)
Respondeu 09/12/2008 em 18:16
fonte usuário

votos
1

Talvez você deve perguntar ao desenvolvedor a lógica por trás de fazer a mudança.

Respondeu 09/12/2008 em 21:48
fonte usuário

votos
0

Se você queria o gatilho usar você poderia começar outro gatilho adicionada é a única razão que eu posso vir acima com. Mesmo assim é perigoso quanto outro gatilho pode ser adicionado e novamente você deseja obter a identidade errada. Eu suspeito que o desenvolvedor não sabe o que está fazendo. Mas, honestamente, a melhor coisa a fazer é perguntar por que ele fez a alteração. Você poderia mudá-lo de volta, mas o desenvolvedor precisa saber para não fazer isso novamente, a menos que ele precisa a identidade gatilho como você não pode pegá-lo na próxima vez.

Respondeu 09/12/2008 em 21:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more