Rozeznáváme 2 typy příkazu, které slouží k mazání dat – SQL příkazy DELETE a TRUNCATE (viz článek mazání dat v tabulce – TRUNCATE). Každý je jiny a hodí se pro jinou situaci.

Syntaxe DELETE (první varianta je optional):

DELETE FROM dbo.Tabulka
WHERE Podminka;

nebo

DELETE dbo.Tabulka
WHERE Podminka;

 

Mazání velkého množství záznamů opatrně

Pomocí příkazu můžeme z tabulky vymazat záznamy a na rozdíl od TRUNCATE zde můžeme stanovit podmínku. Pokud podmínku nestanovíme, je smazána celá tabulka. Pokud příkaz nad tabulkou pustíme, je celý průběh zaznamenávám v transakčním logu. Proto je v tomto případě lepší použít TRUNCATE, protože je transakční log zatížen jen minimálně a průběh je daleko rychlejší

U mazání velkého počtu záznamů se nám tím pádem může tato operace dost protáhnout. Navíc nám transakční log během operace dost nabobtná. Mazáním většího počtu záznamů může také dojít k locku celé tabulky. Pokud se chcete těmto problémům vyhnout, tak při použití v tomto příkazu nad velkým množstvím záznamů iterujte po předem daném množství mazaných záznamů, viz. cyklus:

Syntaxe DELETE pro velké množství záznamů

WHILE 1 = 1
   BEGIN
   DELETE TOP (1000) FROM dbo.Tabulka
   WHERE Podminka
IF @@rowcount < 1000 BREAK;
END

Skript bude mazat po 1000 záznamech a cyklus přeruší pokud  bude počet vymazaných záznamů nižší než 1000 = došlo k poslední iteraci.

Syntaxe na základě JOIN

DELETE FROM dbo.Tabulka
FROM dbo.Tabulka AS A
INNER JOIN dbo.Tabulka_2 AS B
ON A.ID = B.ID
WHERE B.Podminka;

Rozdíl DELETE vs TRUNCATE v SQL Server

Oba dva příkazy mažou z tabulky záznamy, existuje však mezi nimi řada rozdílů

  • Transakční log – zapisuje každý vymazaný záznam do transakčního logu a zpomaluje se tak celá operace
  • Indexované View – DELETE statement na rozdíl od TRUNCATE můžeme aplikovat na indexované view
  • Podmínka – u mazání můžeme stanovit podmínku, použít JOINY a common table expression
5/5 - (2 votes)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *