Usuário com melhor resposta
Deletar registros de várias tabelas com Inner Join

Pergunta
-
Boa noite pessoal,
Será que alguém conseguiria me ajudar com a dúvida abaixo? Não sei nem se existe essa possibilidade no SQL Server, mas vamos lá...
Tenho a consulta abaixo que possui join com várias outras tabelas e preciso deletar o registro de todas essas tabelas que participam do join, para dessa forma não ter que ficar executando delete por delete em cada tabela com o seu campo chave.
Isso seria possível?
SELECT DISTINCT
A.FPL_CosIdentificadorUnico,
A.FPL_CDIRETESCSTRAB,
B.FPN_CDIRETESCSTRAB,
C.FPQ_CDIRETESCSTRAB,
C.FPQ_CDIRETESCSTRABEST,
D.FPU_CDIRETESCSTRABESTTRAB,
E.FPV_CDIRETESCSTRABESTTRAB
FROM RetseSCSTrabs A
INNER JOIN RetseSCSTrabsTpsCalcs B ON (A.FPL_CDIRETESCSTRAB = B.FPN_CDIRETESCSTRAB)
INNER JOIN RetseSCSTrabsEsts C ON (B.FPN_CDIRETESCSTRAB = C.FPQ_CDIRETESCSTRAB)
INNER JOIN RetseSCSTrabsEstsTrabs D ON (C.FPQ_CDIRETESCSTRABEST = D.FPU_CDIRETESCSTRABEST)
INNER JOIN RetseSCSTrabsEstsTrabsIts E ON (D.FPU_CDIRETESCSTRABESTTRAB = E.FPV_CDIRETESCSTRABESTTRAB)
WHERE A.FPL_CosIdentificadorUnico = 'ID1023848710000002020051215275500000'
Abaixo o resultado da consulta
Respostas
-
Pessoal, dando uma pesquisada acabei encontrando apenas um modo de fazer utilizando a instrução Declare ficando da seguinte forma:
DECLARE @Id AS varchar(36) SET @Id = 'ID1023848710000002020060415031500000' Delete from RetseSCSTrabsEstsTrabsIts where FPV_CdiReteSCSTrabEstTrab in (Select a.FPU_CdiReteSCSTrabEstTrab from RetseSCSTrabsEstsTrabs a inner join RetseSCSTrabsEsts on (a.FPU_CdiReteSCSTrabEst = FPQ_CdiReteSCSTrabEst) inner join RetseSCSTrabs B on (FPQ_CdiReteSCSTrab = b.FPL_CdiReteSCSTrab) where b.FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEstsTrabs where FPU_CdiReteSCSTrabEst in (select a.FPQ_CdiReteSCSTrabEst from RetseSCSTrabsEsts a inner join RetseSCSTrabs on (a.FPQ_CdiReteSCSTrab = FPL_CdiReteSCSTrab) where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEsts where FPQ_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsTpsCalcs where FPN_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a /*inner join AltsContratuaiseSoc on (a.EQM_CdiAltContratualeSoc = SJJ_CdiAltContratualeSoc)*/ where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabs where FPL_CosIdentificadorUnico = @Id;
Valeu!
- Marcado como Resposta OHMLE quinta-feira, 16 de julho de 2020 13:40
Todas as Respostas
-
Existe chaves referencias entre as tabelas? (Chave Primaria e estrangeira?)
Foi definida como cascade? Se não, voce pode alterar a constraint para permitir delete em cascata, mas precisa ser muito bem avaliado para evitar desastres.Fabiano Carvalho
-
Pessoal, dando uma pesquisada acabei encontrando apenas um modo de fazer utilizando a instrução Declare ficando da seguinte forma:
DECLARE @Id AS varchar(36) SET @Id = 'ID1023848710000002020060415031500000' Delete from RetseSCSTrabsEstsTrabsIts where FPV_CdiReteSCSTrabEstTrab in (Select a.FPU_CdiReteSCSTrabEstTrab from RetseSCSTrabsEstsTrabs a inner join RetseSCSTrabsEsts on (a.FPU_CdiReteSCSTrabEst = FPQ_CdiReteSCSTrabEst) inner join RetseSCSTrabs B on (FPQ_CdiReteSCSTrab = b.FPL_CdiReteSCSTrab) where b.FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEstsTrabs where FPU_CdiReteSCSTrabEst in (select a.FPQ_CdiReteSCSTrabEst from RetseSCSTrabsEsts a inner join RetseSCSTrabs on (a.FPQ_CdiReteSCSTrab = FPL_CdiReteSCSTrab) where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEsts where FPQ_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsTpsCalcs where FPN_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a /*inner join AltsContratuaiseSoc on (a.EQM_CdiAltContratualeSoc = SJJ_CdiAltContratualeSoc)*/ where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabs where FPL_CosIdentificadorUnico = @Id;
Valeu!
- Marcado como Resposta OHMLE quinta-feira, 16 de julho de 2020 13:40