Zmazanie zaznamu z viacerych tabuliek – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zmazanie zaznamu z viacerych tabuliek – MS SQL – Fórum – Programujte.comZmazanie zaznamu z viacerych tabuliek – MS SQL – Fórum – Programujte.com

 

ing0
Stálý člen
24. 3. 2016   #1
-
0
-

Ahojte, skúšal som googliť no moc mi to nepomohlo

Mám 6 tabuliek, chcel by som zo všetkých týchto tabuliek zmazať určité záznamy v jednom kroku

delete from main_table, psw_records, psw_material, psw_dimensional, psw_dvpr, packinfo 
join psw_records on psw_records.id_main = main_table.id 
join psw_material on psw_material.id_main = main_table.id 
join psw_dimensional on psw_dimensional.id_main = main_table.id 
join psw_dvpr on psw_dvpr.id_main = main_table.id 
join packinfo on psw_dvpr.id_main = main_table.id where main_table.id = 1043

toto som aktualne vygooglil a nejako poskladal, no vzdy skoncim na chybe  

incorect syntax near ","

dik za každú radu

Nahlásit jako SPAM
IP: 213.81.137.–
V programovani som uplna lama, ale som samouk tak sa nesmejte
RomanZ
~ Anonymní uživatel
272 příspěvků
24. 3. 2016   #2
-
0
-

Myslím že to takhle nejde. DELETE maže vždy jen z jedné tabulky, další tabulky se dají připojit jen kvůli psaní podmínek.

To co potřebuješ se řeší kaskádním mazáním, ale na to musí být dobře nadefinované cizí klíče. Viz třeba zde:

https://www.mssqltips.com/sqlservertip/2743/using-delete-cascade-option-for-foreign-keys/

Nahlásit jako SPAM
IP: 194.212.10.–
Deathmar
~ Anonymní uživatel
2 příspěvky
23. 6. 2016   #3
-
0
-

#1 ing

Nevím jak jsi tu otázku přesně myslel, ale pokud máš problém v SQL napsat toto, pak se do cascade vůbec nepouštěj a to nemyslím nijak zle.

Teď co se týče řešení:
Pokud ti jde o to provést vše nebo nic, pak těch víc příkazů uzavři do jedné transakce:

begin transaction
go
delete x where ...
delete y where ...
...
go
commit transaction
go

Pokud ti jde o to, aby jsi nemusel where Id = xxx vypisovat u každého delete zvlášť, pak si to Id přiřaď do proměnné a v každém delete se pak na ni odkaž:

declare @Id int = cislo
begin transaction
go
delete table1 where id = @Id
delete table2 where id = @Id|
...
go
commit transaction
go

Tento dotaz si ulož a pak vždycky stačí jen změnit hodnotu @Id a dotaz zpustit...

Nahlásit jako SPAM
IP: 109.105.40.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Truncate zmazanie tabulky — založil Maťkooo

Prepojenie tabuliek — založil Daman

Vyber poslednych z 2 tabuliek — založil Anonymous

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý