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

O SQL Server garante a inserção sequencial de uma coluna de identidade?


Garantido como em absolutamente nenhuma circunstância você poderia obter um valor que pode ser menor ou igual ao valor máximo atual? Não, não existe essa garantia. Dito isto, as circunstâncias em que esse cenário pode acontecer são limitadas:
  1. Alguém desativa a inserção de identidade e insere um valor.
  2. Alguém propaga novamente a coluna de identidade.
  3. Alguém altera o sinal do valor de incremento (ou seja, em vez de +1, ele é alterado para -1)

Assumindo nenhuma dessas circunstâncias, você está a salvo de condições de corrida criando uma situação em que o próximo valor é menor que um valor existente. Dito isso, não há garantia de que as linhas serão confirmadas na ordem de seus valores identitários. Por exemplo:
  1. Abra uma transação, insira em sua tabela com uma coluna de identidade. Digamos que obtenha o valor 42.
  2. Insira e confirme na mesma tabela outro valor. Digamos que obtenha o valor 43.

Até que a primeira transação seja confirmada, 43 existe, mas 42 não. A coluna de identidade está simplesmente reservando um valor, não está ditando a ordem dos commits.