4 soluções alternativas quando a restrição exclusiva impede que você insira um novo registro em SQL Server

Compartilhe agora:

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:Registros na Tabela “DataNumenProdutos"

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:

Registros atualizados na tabela “DataNumenProdutos"

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:Recordes Finais na Tabela “DataNumen Produtos"

Figura 3 Registros Finais na Tabela “DataNumen Produtos"

Solução alternativa 2: modifique a chave primária do registro existente para evitar conflitos

  1. 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:

Registros atualizados na tabela “DataNumen Produtos"

Figura 4 Registros atualizados na tabela “DataNumen Produtos"

  1. 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:

Registros Finais na Tabela “DataNumen Produtos"

Figura 5 Registros Finais na Tabela “DataNumen Produtos"

Solução alternativa 3: Desative temporariamente a restrição de unicidade via SQL.

  1. 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;
  1. 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:

Registros atualizados na tabela “DataNumen Produtos"

Figura 6 Registros atualizados na tabela “DataNumen Produtos"

  1. 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';
  1. 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:

Conteúdo atualizado na tabela “DataNumen Produtos"

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:

  1. Em primeiro lugar, excluímos a restrição de chave primária “pk” na tabela via GUI, conforme abaixo:

Exclua a restrição de chave primária “pk” via GUI

Figura 8 Exclua a restrição de chave primária “pk” via GUI

  1. 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:

Conteúdo atualizado na tabela “DataNumen Produtos"

Figura 9 Conteúdo atualizado na tabela “DataNumen Produtos"

  1. 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';
  1. Por fim, adicionamos de volta a restrição de chave primária “pk” à tabela via GUI, conforme abaixo:Adicione de volta a restrição de chave primária “pk” via GUI

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

Compartilhe agora:

Comentários estão fechados.