Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изтрия от множество таблици, използвайки INNER JOIN в SQL сървър

Можете да се възползвате от "изтритата" псевдо таблица в този пример. Нещо като:

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;

Очевидно можете да направите „изход изтрит“. при втората изтрийте също, ако имате нужда от нещо, към което да се присъедините за третата маса.

Като странична бележка можете също да направите inserted.* в израз за вмъкване и както вмъкнат.*, така и изтрит.* в израз за актуализиране.

РЕДАКТИРАНЕ: Освен това, обмисляли ли сте да добавите тригер към таблица 1 за изтриване от таблица 2 + 3? Ще бъдете вътре в неявна транзакция и също така ще имате „вмъкнато.“ и „изтрито“. " налични са псевдотаблици.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преструктуриране и реорганизиране на индекса на SQL Server

  2. SQL Server, подвеждащият XLOCK и оптимизации

  3. Как да направите ЛЯВО ANTI SEMI JOIN в SQL Server

  4. INSERT INTO срещу SELECT INTO

  5. Външен ключ към непървичен ключ