Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server - Melhor maneira de obter a identidade da linha inserida?


  • @@IDENTITY retorna o último valor de identidade gerado para qualquer tabela na sessão atual, em todos os escopos. Você precisa ter cuidado aqui , já que está entre os escopos. Você pode obter um valor de um gatilho, em vez de sua instrução atual.

  • SCOPE_IDENTITY() retorna o último valor de identidade gerado para qualquer tabela na sessão atual e o escopo atual. Geralmente o que você deseja usar .

  • IDENT_CURRENT('tableName') retorna o último valor de identidade gerado para uma tabela específica em qualquer sessão e em qualquer escopo. Isso permite que você especifique de qual tabela você deseja o valor, caso as duas acima não sejam exatamente o que você precisa (muito raro ). Além disso, como @Guy Starbuck mencionou, "Você pode usar isso se quiser obter o valor IDENTITY atual para uma tabela na qual você não inseriu um registro".

  • A OUTPUT cláusula do INSERT A instrução permitirá que você acesse todas as linhas que foram inseridas por meio dessa instrução. Como tem como escopo a declaração específica, é mais direto do que as outras funções acima. No entanto, é um pouco mais detalhado (você precisará inserir em uma variável de tabela/tabela temporária e, em seguida, consultar isso) e fornece resultados mesmo em um cenário de erro em que a instrução é revertida. Dito isso, se sua consulta usa um plano de execução paralela, este é o único método garantido para obter a identidade (com exceção de desligar o paralelismo). No entanto, ele é executado antes gatilhos e não pode ser usado para retornar valores gerados pelo gatilho.