Por que uma tabela do SQL Server não pode ter mais de uma coluna de identidade?
CREATE TABLE t(id INT IDENTITY, id2 INT IDENTITY)
Msg 2744, Nível 16, Estado 2, Linha 5
Múltiplas colunas de identidade especificadas para a tabela 't'.
Apenas uma coluna de identidade por tabela é permitida.
Entendo que podemos resolvê-lo usando uma coluna computada.
De acordo com a documentação do produto, uma tabela não pode ter mais de uma coluna de identidade. Mas por que? Qual é a verdadeira razão por trás disso?
Eu não acho que haja algum motivo "interno" real. Os metadados são armazenados no nível da coluna, não no nível da tabela. Seria necessário repensar as funções escalares, como a
scope_identity()
sintaxe da pseudocoluna, pois$identity
agora haveria ambiguidades.Filosoficamente, se o objetivo
identity
é produzir algo que identifica exclusivamente uma entidade, por que você precisaria de dois valores calculados arbitrários diferentes atuando nessa função?E onde está o benefício afinal? Este é um site falso, então vou repetir meu exemplo de SO .
Desde o SQL Server 2012, você pode se desvencilhar e adicionar quantas colunas quiser em uma tabela usando padrões de sequência. Por exemplo:
Em vez disso, você poderia usar uma coluna computada , começando em algum valor mais o valor id: