Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak usunąć z wielu tabel za pomocą INNER JOIN na serwerze SQL?

W tym przykładzie możesz skorzystać z „usuniętej” pseudotabeli. Coś takiego:

begin transaction;

   declare @deletedIds table ( id int );

   delete from t1
   output deleted.id into @deletedIds
   from table1 as t1
    inner join table2 as t2
      on t2.id = t1.id
    inner join table3 as t3
      on t3.id = t2.id;

   delete from t2
   from table2 as t2
    inner join @deletedIds as d
      on d.id = t2.id;

   delete from t3
   from table3 as t3 ...

commit transaction;

Oczywiście możesz wykonać „wyjście usunięte”. przy drugim usuń również, jeśli potrzebujesz czegoś do przyłączenia się przy trzecim stole.

Na marginesie, możesz również wykonać insert.* na instrukcji INSERT oraz zarówno insert.*, jak i usunięty.* na instrukcji aktualizacji.

EDYTUJ: Czy rozważałeś dodanie wyzwalacza na table1 w celu usunięcia z table2 + 3? Wejdziesz w niejawną transakcję i będziesz mieć również „wstawione.” i „usunięte. " dostępne pseudotabele.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd krytyczny:wywołanie niezdefiniowanej funkcji sqlsrv_connect()

  2. Idealna burza do uaktualnienia do nowoczesnej wersji SQL Server

  3. Jak wykryć, czy wartość zawiera co najmniej jedną liczbę w SQL Server?

  4. Sprawdź, czy tabela istnieje w SQL Server

  5. Ulepszenia tempdb w SQL Server 2019