Comandos SQL Server 2018

09/08/2018

0

Olá pessoal!

Estou tentando executar um comando para excluir a tabela
"Solicitacoes"


Porém ao executar o comando abaixo:

delete from Solicitacoes where Empresa = 1


O SQL Server retorna com a mensagem:

Mensagem 547, Nível 16, Estado 0, Procedimento TD_Solicitacoes, Linha 18
The DELETE statement conflicted with the REFERENCE constraint "FK_COmpras_Solic". The conflict occurred in database "excluir", table "dbo.ItensCompra", column ''''Sequencial''''.
The statement has been terminated.

Acredito que é por causa de alguma chave primária, certo?

Neste caso, qual comando eu posso usar para excluir o registro nas duas tabelas ao mesmo tempo? Verificando se o registro existe nas duas e excluir, lembrando que preciso excluir tudo o que é da empresa 1.
Julio Santos

Julio Santos

Responder

Post mais votado

10/08/2018

Quando você tem chaves estrangeiras, precisa excluir os dados primeiro da tabela filha e depois da tabela pai.
Nesse caso sua QUERY ficaria assim:

DELETE itenscompra
 WHERE EXISTS (SELECT 1 FROM solicitacoes sol 
                WHERE sol.empresa = 1
				  AND sol.numerosolic = itenscompra.cotacao)


Para excluir os dados de item (tabela filha).

E depois esse:

DELETE solicitacoes			  
 WHERE empresa = 1


Para excluir os dados da tabela pai.

Isso supondo que você não tenha mais nenhum relacionamento.

Grande abraço

Luiz Santos

Luiz Santos
Responder

Mais Posts

09/08/2018

Alex William

Esse erro ocorre pq as solicitações que tu ta tentando excluir estão ligadas a tabela de compras e como o codigo da solicitação é uma chave estrangeira na tabela de compras ele n deixa excluir.

Tente usar um INNER JOIN no delete:

 DELETE sol, comp FROM solicitacoes sol INNER JOIN compras_solic comp ON comp.cod_solicitacao = sol.codigo WHERE sol.empresa = 1


Algo do tipo, porque tu vais ter que excluir junto com as solicitações, as compras ligadas a ela.

Ou pode quebrar a FK da tabela, mas isso pode acarretar problemas na sua Base de Dados.

P.S.: Essa query que eu passei é exemplo.
Responder

09/08/2018

Julio Santos

Executei o comando abaixo:

DELETE it 
FROM solicitacoes sol INNER JOIN itenscompra it 
ON it.cotacao = sol.numerosolic WHERE sol.empresa = 1


Porém ele me deu essa outra mensagem

Mensagem 30040, Nível 16, Estado 1, Procedimento TD_ItensCompra, Linha 30
JÁ EXISTE ATENDIMENTO PARA ESSE ITEM
Mensagem 3609, Nível 16, Estado 1, Linha 1
The transaction ended in the trigger. The batch has been aborted.
Responder

10/08/2018

Alex Lekao

Ola Bom dia!!!

Para excluir tabela você teria que utilizar drop table "nome da tabela", não sei se entendi bem o que vc esta querendo.

https://docs.microsoft.com/pt-br/sql/t-sql/statements/drop-table-transact-sql?view=sql-server-2017

O delete é utilizado para deleção de conteúdo, embora em alguns caso o recomendado possa ser utilizar o truncate.

https://docs.microsoft.com/pt-br/sql/t-sql/statements/delete-transact-sql?view=sql-server-2017

Abraco.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar