Se você já tentou inserir valores em uma coluna de identidade no SQL Server, pode ter visto um erro como este:
Não é possível inserir um valor explícito para a coluna de identidade na tabela 'Artistas' quando IDENTITY_INSERT está definido como OFF.
Isto é normal. Uma coluna de identidade está lá por um motivo. Ele preenche automaticamente a coluna com um valor incremental para cada linha inserida. Portanto, não há necessidade de você inserir um valor nessa coluna.
No entanto, às vezes você faz precisa inserir um valor em uma coluna de identidade. Por exemplo, você pode estar preenchendo o banco de dados com dados que precisam reter seus próprios valores de identidade. Se for esse o caso, você precisará substituir a
IDENTITY
propriedade. Aqui está como. Ativar IDENTITY_INSERT
Você pode substituir a
IDENTITY
propriedade ativando IDENTITY_INSERT
. Isso permite que você insira seus próprios valores em uma coluna de identidade. Aqui está um exemplo:
SET IDENTITY_INSERT Artists ON; INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom) VALUES (1001, 'AC/DC','1973-01-11'), (1002, 'Allan Holdsworth','1969-01-01'), (1003, 'Buddy Rich','1919-01-01'); SET IDENTITY_INSERT Artists OFF;
Neste exemplo, a tabela Artistas tem uma coluna de identidade (neste caso, ArtistId é a coluna de identidade). Para substituir a
IDENTITY
simplesmente precedemos o INSERT
declaração com SET IDENTITY_INSERT Artists ON
. Esta instrução T-SQL permite que você diga “Eu sei que esta tabela tem uma coluna de identidade, mas neste caso, insira meu valores em vez disso”. Observe que
IDENTITY_INSERT
só pode ser ativado em uma tabela por vez. Portanto, é uma boa ideia desabilitar IDENTITY_INSERT
imediatamente após a inserção. Isso o coloca de volta ao seu estado original e permite que você substitua uma coluna de identidade em uma tabela diferente, se necessário. Além disso, para habilitar
IDENTITY_INSERT
o usuário deve possuir a tabela ou ter ALTER
permissão na mesa. Copiando entre tabelas
Ativando
IDENTITY_INSERT
também pode ser útil quando você está copiando dados entre tabelas. Por exemplo, você pode estar preenchendo uma tabela de outra. Aqui está um exemplo de cópia de dados da tabela Artists para a tabela Artists_Archive:
SET IDENTITY_INSERT Artists_Archive ON; INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom) SELECT ArtistId, ArtistName, ActiveFrom FROM Artists; SET IDENTITY_INSERT Artists_Archive OFF;
Uma coisa a notar é que, se a coluna de identidade tiver uma restrição de chave primária, ela rejeitará quaisquer valores que já existam na tabela de destino. Portanto, você precisa ter certeza absoluta de que substituir a coluna de identidade é o que você definitivamente deseja fazer.