Příkaz INSERT volíme v situaci, kdy potřebujeme vložit záznamy do tabulky. Vložení řádků můžeme udělat několika způsoby (podrobněji je popisuji dále) kdy:
- Vkládáme hodnoty, které fixně vyjmenujeme (INSERT INTO … VALUES(hodnota1, hodnota2, …))
- Vkládáme záznamy do tabulky pomocí skriptu (SELECT – vybíráme hodnoty z tabulky) v kombinaci s INTO “cílová tabulka”). Tady se prakticky jedná o kombinaci založení tabulky, tedy CREATE TABLE a vložení záznamů definovaných v SELECT klauzuli. V tomto případě tedy cílová tabulka neexistuje
- Pokud cílová tabulka, do které chceme vkládat existuje, tak volíme variantu INSERT INTO Tabulka SELECT….
Všechny 3 situace jsou popsány níže
Syntaxe SQL INSERT
(1) Základní syntaxe v případě kdy potřebujeme vložit jednu nebo několik málo hodnot:
INSERT INTO dbo.Tabulka (sloupec 1, sloupec 2, sloupec 3,...sloupecN)
VALUES ('hodnota 1', 'hodnota 2', 'hodnota 3',...'hodnota N');
(2) Pokud chceme vytvořit tabulku a vložit do ní záznamy z jiné tabulky (nová tabulka ještě neexistuje):
SELECT (sloupec 1, sloupec 2, sloupec 3,...sloupecN)
INTO dbo.Nova_Tabulka
FROM dbo.Tabulka;
Zajímavost: Tímto postupem bude tabulka založena bez objektů, které se vážou k původní tabulce – primárních klíčů, indexů, statistik, trigerů atd. Nová tabulka obsahuje pouze data a definice tabulky jako takové odpovídá původní tabulce.
(3) Vložení záznamů do tabulky jako výsledek dotazu:
INSERT INTO TABULKA (sloupec 1, sloupec 2, sloupec 3,...sloupecN)
SELECT (sloupec 1, sloupec 2, sloupec 3,...sloupecN)
FROM dbo.Tabulka;
Při vkládání záznamů do tabulky přes příkaz INSERT INTO musí platit že:
- Počet a názvy sloupců tabulky do které vkládáme záznamy musí odpovídat zdrojovým záznamům, jinak výsledkem bude chyba: The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns viz obrázek
- Datové typy musí odpovídat, nelze například vkládat VARCHAR do sloupce s datovým typem INTEGER. Výsledkem bude pravděpodobně nějaká chyba konverze typu Conversion failed when converting the varchar value ‘1.1’ to data type int viz obrázek
Více o tomto příkazu se dočtete v technické dokumentaci na webu Microsoft zde