Você não pode atualizar a coluna de identidade.
O SQL Server não permite atualizar a coluna de identidade, diferente do que você pode fazer com outras colunas com uma instrução de atualização.
Embora existam algumas alternativas para atingir um tipo semelhante de requisito.
- Quando o valor da coluna Identity precisar ser atualizado para novos registros
Use DBCC CHECKIDENT que verifica o valor atual da identidade da tabela e, se necessário, altera o valor da identidade.
DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
- Quando o valor da coluna Identity precisa ser atualizado para registros existentes
Use IDENTITY_INSERT, que permite que valores explícitos sejam inseridos na coluna de identidade de uma tabela.
SET IDENTITY_INSERT YourTable {ON|OFF}
Exemplo:
-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in the identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to the previous track
SET IDENTITY_INSERT YourTable OFF
UPDATE YourTable SET IdentityCol = 13
).SET IDENTITY_INSERT YourTable ON
permite apenas INSERTs, não UPDATEs.Se você acertou sua pergunta, você quer fazer algo como
Deixe-me dizer-lhe, não é um processo fácil e não é aconselhável usá-lo, pois pode haver alguns
foreign key
associados.Mas aqui estão os passos para fazê-lo, por favor, tome um
back-up
da tabelaEtapa 1- Selecione a visualização de design da tabela
Etapa 2- Desative a coluna de identidade
Agora você pode usar a
update
consulta.Agora,
redo
as etapas 1 e 2 e ative a coluna identidadeReferência
fonte
:)
Você precisa
Em seguida, exclua sua linha e reinsira-a com uma identidade diferente.
Depois de concluir a inserção, não se esqueça de desativar o identity_insert
fonte
fonte
Tente usar
DBCC CHECKIDENT
:fonte
copie sua tabela para uma nova tabela sem coluna de identidade.
adicione uma coluna de identidade à nova tabela com nova semente e faça-a como chave primária
fonte
table_name = forneça a tabela que você deseja redefinir o valor
value = valor inicial como zero, para iniciar a coluna de identidade com 1
fonte
Ao usar o Identity_Insert, não se esqueça de incluir os nomes das colunas, porque o sql não permitirá que você insira sem especificá-los
fonte
Você também pode usar
SET IDENTITY INSERT
para permitir inserir valores em uma coluna de identidade.Exemplo:
E então você pode inserir em uma coluna de identidade os valores necessários.
fonte
No entanto, o código acima funciona apenas se não houver relação de chave estrangeira primária
fonte
Solução completa para programadores em C # usando o construtor de comandos
Primeiro de tudo, você precisa conhecer esses fatos:
Então, uma vez sabendo disso, o que você precisa fazer é. Programe sua própria instrução SQL Insert ou programe seu próprio construtor de comandos insert. Ou use este programado para você. Dada uma DataTable, gera o script SQL Insert:
fonte
Resolvi esse problema primeiro usando o DBCC e depois usando o insert. Por exemplo, se sua mesa é
Primeiro, defina o novo valor atual do ID na tabela como NEW_RESEED_VALUE
MyTable {IDCol, colA, colB}
então você pode usar
Isso duplicaria todos os seus registros, mas usando o novo valor de IDCol começando como NEW_RESEED_VALUE. Em seguida, você pode remover linhas duplicadas com maior valor de ID depois de remover / mover as referências de chave estrangeira, se houver.
fonte
Você pode criar uma nova tabela usando o seguinte código.
Em seguida, exclua o banco de dados antigo e renomeie o novo banco de dados para o nome do banco de dados antigo. Nota : essa coluna1 e coluna2 representam todas as colunas da sua tabela antiga que você deseja manter na sua nova tabela.
fonte
Se você precisar especificamente alterar o valor da chave primária para um número diferente (ex 123 -> 1123). A propriedade de identidade bloqueia a alteração de um valor PK. Definir Identity_insert não vai funcionar. Não é recomendável fazer uma inserção / exclusão se houver exclusões em cascata (a menos que você desative a verificação de integridade referencial).
Este script desativará a identidade em um PK:
Em seguida, você pode definir os relacionamentos para que eles atualizem as referências de chave estrangeira. Ou então, você precisa desativar a imposição de relacionamento. Este link SO mostra como: Como as restrições de chave estrangeira podem ser temporariamente desabilitadas usando o T-SQL?
Agora, você pode fazer suas atualizações. Eu escrevi um script curto para escrever toda a minha atualização SQL com base no mesmo nome de coluna (no meu caso, eu precisava aumentar o CaseID em 1.000.000:
Por fim, reative a integridade referencial e, em seguida, reative a coluna Identidade na chave primária.
Nota: Eu vejo algumas pessoas nessas perguntas perguntando POR QUE. No meu caso, tenho que mesclar dados de uma segunda instância de produção em um banco de dados mestre para poder desligar a segunda instância. Eu só preciso de todos os PK / FKs de dados de operações para não colidir. Os FKs de metadados são idênticos.
fonte