Se você falhou ao inserir um novo registro em uma tabela por causa da restrição exclusiva, não deixe de ler este artigo. Ele irá ajudá-lo a resolver este problema.
Neste artigo, apresentaremos 4 métodos para resolver o problema quando você não consegue inserir um novo registro porque viola a restrição de exclusividade da tabela em SQL Server.
Um caso real:
Agora vamos ver um caso real. Temos um banco de dados chamado “Produto” e há uma tabela chamada “DataNumenProduto” no banco de dados. Existem dois campos na tabela, ou seja, “ProductId” e “ProductName”, com tipos de dados de “int” e “varchar” respectivamente. E “ProductId” é uma chave primária com restrição exclusiva.
Atualmente existem alguns registros na tabela, conforme abaixo:
Figura 1 Registros na Tabela “DataNumenProdutos"
Supondo que haja dois DBAs para o banco de dados, ou seja, Jim e Tom. Certo dia, Jim apagou o primeiro registro da tabela, conforme abaixo:
DELETE FROM DataNumenProduct WHERE ProductId=1;
No segundo dia, Tom inseriu um novo registro na tabela, que possui a mesma chave primária do registro deletado, conforme abaixo:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Assim nossa tabela possui os seguintes registros, conforme abaixo:
Figura 2 Registros atualizados na tabela “DataNumenProdutos"
Agora, se Jim quiser restaurar o registro excluído de volta à tabela, isso violará a restrição exclusiva da chave primária “ProductId”. Nesse caso, podemos usar uma das soluções abaixo para resolver o problema.
Solução alternativa 1: modifique a chave primária do novo registro para evitar conflitos
Podemos modificar a chave primária do registro a ser inserido para um novo valor diferente de todos os registros existentes na tabela. Tomemos como exemplo o caso acima, para que o registro seja inserido, podemos modificar o valor da chave primária de 1 a 5. Em seguida, podemos restaurar o novo registro gerado de volta à tabela, conforme abaixo:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Abaixo estão os registros finais na tabela:
Figura 3 Registros Finais na Tabela “DataNumen Produtos"
Solução alternativa 2: modifique a chave primária do registro existente para evitar conflitos
- Primeiro, precisamos atualizar o valor da chave primária do registro existente que pode causar conflito, conforme abaixo:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Abaixo seguem os registros atualizados na tabela:
Figura 4 Registros atualizados na tabela “DataNumen Produtos"
- Em seguida, podemos restaurar o registro excluído de volta à tabela, conforme abaixo:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Agora vamos ver a versão final, conforme abaixo:
Figura 5 Registros Finais na Tabela “DataNumen Produtos"
Solução alternativa 3: Desative temporariamente a restrição de unicidade via SQL.
- Para resolver o problema, podemos excluir temporariamente a restrição de chave primária “pk” na tabela, como abaixo:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Em seguida, podemos adicionar de volta o registro excluído à tabela, conforme abaixo:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Agora vamos ver os registros na tabela:
Figura 6 Registros atualizados na tabela “DataNumen Produtos"
- Então, como dois registros possuem os mesmos valores de chave primária, precisamos modificar um deles para evitar conflitos, conforme abaixo:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Por fim, adicionamos de volta a restrição de chave primária “pk” à tabela, conforme abaixo:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Agora existem alguns registros na tabela, conforme abaixo:
Figura 7 Conteúdo atualizado na tabela “DataNumen Produtos"
Solução alternativa 4: Desative temporariamente a restrição de unicidade através de SQL Server Estúdio de Gestão:
- Em primeiro lugar, excluímos a restrição de chave primária “pk” na tabela via GUI, conforme abaixo:
Figura 8 Exclua a restrição de chave primária “pk” via GUI
- Em seguida inserimos o registro deletado em caso real na tabela, conforme abaixo.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Agora existem alguns registros na tabela, conforme abaixo:
Figura 9 Conteúdo atualizado na tabela “DataNumen Produtos"
- Em seguida modificamos o valor da chave primária do registro existente na tabela, conforme abaixo:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Por fim, adicionamos de volta a restrição de chave primária “pk” à tabela via GUI, conforme abaixo:
Figura 8 Adicionar de volta a restrição de chave primária “pk” via GUI
Resolver SQL Server Corrupção de banco de dados
Além das restrições exclusivas, SQL Server corrupção também é um problema muito comum que incomoda os DBAs. Normalmente podemos usar SQL Server comandos internos para resolver as corrupções. No entanto, se eles não funcionarem, podemos recorrer a alguns serviços de terceiros SQL Server ferramentas de recuperação de dados.
Introdução do autor:
Jim Hu é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparo de acesso e dbf reparar produtos de software. Para mais informações visite www.datanumen.com








