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
Syntaxe klauzule INSERT v T-SQL je relativně jednoduchá, ale je nutné dodržet několik klíčových pravidel. Zde je základní struktura klauzule:
(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:
a) 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
b) 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