Comandos SQL Server 2018
Olá pessoal!
Estou tentando executar um comando para excluir a tabela
Porém ao executar o comando abaixo:
O SQL Server retorna com a mensagem:
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.
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.
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
Curtidas 0
Melhor post
Luiz Santos
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:
Para excluir os dados de item (tabela filha).
E depois esse:
Para excluir os dados da tabela pai.
Isso supondo que você não tenha mais nenhum relacionamento.
Grande abraço
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
GOSTEI 1
Mais Respostas
Alex William
09/08/2018
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:
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.
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.
GOSTEI 0
Julio Santos
09/08/2018
Executei o comando abaixo:
Porém ele me deu essa outra mensagem
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.
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.
GOSTEI 0
Alex Lekao
09/08/2018
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.
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.
GOSTEI 0