Základy T-SQL. DML

Co je INSERT INTO?

Hlavním cílem databázových systémů je ukládat data do tabulek. Data jsou obvykle dodávána aplikačními programy, které běží nad databází. Za tímto účelem má SQL příkaz INSERT, který se používá k ukládání dat do tabulky. The Příkaz INSERT vytvoří nový řádek v tabulce pro uložení dat.

Základní syntaxe

Podívejme se na základní syntaxi příkazu SQL INSERT znázorněného níže.

INSERT INTO `název_tabulky`(sloupec_1,sloupec_2,...) HODNOTY (hodnota_1,hodnota_2,...);

  • INSERT INTO `název_tabulky` je příkaz, který říká serveru MySQL, aby přidal nový řádek do tabulky s názvem `název_tabulky`.
  • (sloupec_1, sloupec_2,...) určuje sloupce, které mají být aktualizovány v novém řádku
  • HODNOTY (hodnota_1, hodnota_2,...) určuje hodnoty, které mají být přidány do nového řádku

Při zadávání datových hodnot, které mají být vloženy do nové tabulky, je třeba při práci s různými datovými typy vzít v úvahu následující.

  • Řetězcové datové typy- všechny hodnoty řetězce by měly být uzavřeny v jednoduchých uvozovkách.
  • Číselné datové typy- všechny číselné hodnoty by měly být dodány přímo, aniž by byly uzavřeny v jednoduchých nebo dvojitých uvozovkách.
  • Datové typy dat- hodnoty data uzavřít do jednoduchých uvozovek ve formátu "RRRR-MM-DD".

Příklad:

Předpokládejme, že máme následující seznam nových členů knihovny, které je třeba přidat do databáze.

Celá jména Datum narození Rod Fyzická adresa Poštovní adresa Kontaktní číslo Emailová adresa
Leonard Hofstadter mužský Woodcrest 0845738767
Sheldon Cooper mužský Woodcrest 0976736763
Rajesh Koothrappali mužský Fairview 0938867763
Leslie Winkle 14/02/1984 mužský 0987636553
Howard Wolowitz 24/08/1981 mužský South Park P.O. Krabice 4563 0987786553

Pojďme“ VLOŽTE data jeden po druhém. Začneme Leonardem Hofstadterem. S kontaktním číslem budeme zacházet jako s číselným datovým typem a nebudeme je uzavírat do jednoduchých uvozovek.

INSERT INTO `členové` (`celá_jména`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Leonard Hofstadter","Muž","Woodcrest",0845738767);

Spuštěním výše uvedeného skriptu se z Leonardova kontaktního čísla odstraní 0. Je to proto, že hodnota bude považována za číselnou hodnotu a nula (0) na začátku je vypuštěna, protože není významná.

Aby se předešlo takovým problémům, musí být hodnota uzavřena v jednoduchých uvozovkách, jak je uvedeno níže -

INSERT INTO `členové` (`celá_jména`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Sheldon Cooper","Muž","Woodcrest", "0976736763");

Ve výše uvedeném případě nebude nula (0) vypuštěna

Změna pořadí sloupců nemá žádný vliv na dotaz INSERT, pokud byly správné hodnoty namapovány na správné sloupce.

Níže uvedený dotaz demonstruje výše uvedený bod.

INSERT INTO `členové` (`kontaktní_číslo`,`pohlaví`,`celá_jména`,`fyzická_adresa`)VALUES ("0938867763","Muž","Rajesh Koothrappali","Woodcrest");

Výše uvedené dotazy přeskočily sloupec data narození, ve výchozím nastavení MySQL vloží hodnoty NULL do sloupců, které jsou v dotazu INSERT přeskočeny.

Nyní vložíme záznam pro Leslie, který má zadané datum narození. Hodnota data by měla být uzavřena v jednoduchých uvozovkách ve formátu „RRRR-MM-DD“.

INSERT INTO `členové` (`celá_jména`,`datum_narození`,`pohlaví`,`fyzická_adresa`,`kontaktní_číslo`) VALUES ("Leslie Winkle","1984-02-14","Muž","Woodcrest"," 0987636553");

Všechny výše uvedené dotazy specifikovaly sloupce a mapovaly je na hodnoty v příkazu insert. Pokud dodáváme hodnoty pro VŠECHNY sloupce v tabulce, můžeme sloupce z vkládacího dotazu vynechat.

INSERT INTO `members` VALUES (9,"Howard Wolowitz","Muž","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Použijme nyní příkaz SELECT k zobrazení všech řádků v tabulce členů.SELECT * FROM `členové`;

členské číslocelá_jménaRoddatum narozenífyzická adresapoštovní_adresačíslo_kontaktue-mailem
1 Janet Jonesováženský21-07-1980 První ulice pozemek č. 4Soukromá taška0759 253 542 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
2 Janet Smith Jonesováženský23-06-1980 Melrose 123NULANULATato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
3 Robert Philmužský12-07-1989 3. ulice 34NULA12345 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.
4 Gloria Williamsováženský14-02-1984 2. ulice 23NULANULANULA
5 Leonard HofstadtermužskýNULAWoodcrestNULA845738767 NULA
6 Sheldon CoopermužskýNULAWoodcrestNULA976736763 NULA
7 Rajesh KoothrappalimužskýNULAWoodcrestNULA938867763 NULA
8 Leslie Winklemužský14-02-1984 WoodcrestNULA987636553 NULA
9 Howard Wolowitzmužský24-08-1981 SouthParkP.O. Krabice 4563987786553 Tato e-mailová adresa je chráněna před spamboty. Pro její zobrazení musíte mít povolen JavaScript.

Všimněte si, že u kontaktního čísla Leonarda Hofstadtera klesla nula (0) z kontaktního čísla. Ostatní kontaktní čísla neklesla na nulu (0) na začátku.

Vkládání do tabulky z jiné tabulky

Příkaz INSERT lze také použít k vložení dat do tabulky z jiné tabulky. Základní syntaxe je uvedena níže.

INSERT INTO tabulka_1 SELECT * FROM tabulka_2;

Podívejme se nyní na praktický příklad, pro demonstrační účely vytvoříme fiktivní tabulku pro kategorie filmů. Novou tabulku kategorií nazveme category_archive. Skript uvedený níže vytvoří tabulku.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Pro vytvoření tabulky spusťte výše uvedený skript.

Vložme nyní všechny řádky z tabulky kategorií do tabulky archivu kategorií. K tomu nám pomáhá níže zobrazený skript.

INSERT INTO `archiv_kategorií` SELECT * FROM `kategorie`;

Spuštěním výše uvedeného skriptu se vloží všechny řádky z tabulky kategorií do tabulky archivu kategorií. Všimněte si, že struktury tabulek musí být stejné, aby skript fungoval. Robustnější skript je ten, který mapuje názvy sloupců ve vkládací tabulce na ty v tabulce obsahující data.

Dotaz uvedený níže ukazuje jeho použití.

INSERT INTO `archiv_kategorií`(id_kategorie,název_kategorie,poznámky) SELECT id_kategorie,název_kategorie,poznámky FROM `kategorie`;

Provedení dotazu SELECT

VYBERTE * Z `archivu_kategorií`

poskytuje následující výsledky uvedené níže.

id_kategorieNázev Kategoriepoznámky
1 KomedieFilmy s humorem
2 RomantickýMilostné příběhy
3 EpickéPříběh starověkých filmů
4 HrůzaNULA
5 Sci-fiNULA
6 ThrillerNULA
7 AkceNULA
8 Romantická komedieNULA
9 KarikaturyNULA
10 KarikaturyNULA

souhrn

  • Příkaz INSERT se používá k přidání nových dat do tabulky
  • Datum a hodnoty řetězce by měly být uzavřeny v jednoduchých uvozovkách.
  • Číselné hodnoty nemusí být uzavřeny v uvozovkách.
  • Příkaz INSERT lze také použít k vložení dat z jedné tabulky do druhé.

tým přidá řádky do tabulky nebo pohled na hlavní tabulku.

Syntaxe příkazu SQL INSERT

Vložit syntaxi příkazu


Základní klíčová slova a parametry příkazu INSERT
  • schéma- identifikátor oprávnění, obvykle se shodující se jménem nějakého uživatele
  • pohled na stůl- název tabulky, do které mají být řádky vloženy; pokud je zadán pohled, řádky se vloží do hlavní tabulky pohledu
  • poddotaz_1- poddotaz, který server zpracovává stejným způsobem jako pohled
  • sloupec- sloupec tabulky nebo zobrazení, do kterého se pro každý vkládaný řádek zadává hodnota z fráze HODNOTY nebo poddotaz; pokud je jeden ze sloupců tabulky v tomto seznamu vynechán, je hodnota sloupce pro vložený řádek výchozí hodnotou sloupce definovanou při vytvoření tabulky. Pokud je seznam sloupců zcela vynechán, klauzule HODNOTY nebo dotaz musí určit hodnoty pro všechny sloupce v tabulce
  • HODNOTY- definuje řetězec hodnot, které budou vloženy do tabulky nebo pohledu; význam musí být definován ve větě HODNOTY pro každý sloupec v seznamu sloupců
  • poddotaz_2- poddotaz, který vrací řádky vložené do tabulky; výběrový seznam tohoto poddotazu musí mít stejný počet sloupců jako seznam sloupců příkazů

Prohlášení s frází HODNOTY přidá do tabulky jeden řádek. Tento řádek obsahuje hodnoty definované frází HODNOTY.
Prohlášení s poddotaz místo fráze HODNOTY přidá všechny řádky vrácené poddotazem do tabulky. Server zpracovává poddotaz a vloží každý vrácený řádek do tabulky. Pokud poddotaz nevybere žádné řádky, server do tabulky nevloží žádné řádky.
Poddotaz má přístup k jakékoli tabulce nebo pohledu, včetně cílové tabulky výrazů . Server přiřazuje hodnoty polím v nových řádcích na základě vnitřní pozice sloupců v tabulce a pořadí hodnot fráze HODNOTY nebo ve výběrovém seznamu dotazu. Pokud v seznamu sloupců chybí nějaké sloupce, server jim přiřadí výchozí hodnoty definované při vytvoření tabulky. Pokud má některý z těchto sloupců omezení NOT NULL, server vrátí chybu označující, že omezení bylo porušeno, a zruší příkaz INSERT.
Když je zadán příkaz INSERT, je povolen jakýkoli spouštěč INSERT definovaný v tabulce.

VLOŽIT DO Příklad 1

VLOŽ DO odd HODNOTY(50, "PRODUKTY", "SAN FRANCISCO");

VLOŽ DO Zákazníci (město, cname, cnum) HODNOTY('Londýn', 'Hoffman', 2001);

VLOŽIT DO Příklad 2
Následující příkaz zkopíruje do tabulky bonusů data zaměstnanců společnosti, jejichž provize přesahují 25 % příjmu:

VLOŽ DO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0,25 * sal;

VLOŽIT DO Příklad 3
Pokud potřebujete vložit NULA-hodnota, musíte ji zadat jako normální hodnotu takto:

VLOŽ DO Prodejci VALUES (1001,'Slupka',NULL,12);

VLOŽIT DO Příklad 4
Příkaz lze použít k načtení hodnot z jedné tabulky a jejich umístění do jiné pomocí dotazu. K tomu stačí větu nahradit HODNOTY na příslušnou žádost:

VLOŽ DO Londonstaff SELECT * FROM Prodejci WHERE city = 'Londýn';

VLOŽENÍ MySQL

Pro vložení nových řádků do databáze Data MySQL použitý příkaz INSERT, příklady příkazů jsou uvedeny níže:
VLOŽIT DO Příklad 1.
Vložení nového řádku do tabulky název_tabulky.

VLOŽ DO

VLOŽIT DO Příklad 2.
Vložení nového řádku do tabulky název_tabulky označující vložení dat do sloupců, které potřebujeme.

VLOŽ DO název_tabulky VALUES('1','165','0','název');

V databázi MySQL Pomocí jednoho příkazu je možné vložit více nových řádků.
VLOŽIT DO Příklad 3.
Vložení více řádků do tabulky název_tabulky.

VLOŽ DO table_name (tbl_id, chislo, chislotwo, name) VALUES ('1′,'159′,'34','name1′), ('2′,'14','61','name2′), ('3 ','356','8','jméno3');

sql dotaz INSERT INTO má smysl, když byla vytvořena databázová tabulka. To znamená, že tabulka existuje, má název, vytvořené řádky a sloupce. tabulku vytvoří operátor: , tabulku upraví operátor .

sql dotaz INSERT INTO - syntaxe dotazu

SQL dotaz INSERT INTO má následující syntaxi:

INSERT INTO název_tabulky (do závorky případně vložte seznam sloupců, kam chcete vložit data) VALUES vložená data1, vložená data2, vložená data3.

Mezi INSERT a INTRO můžete vložit volbu IGNORE. Není to vyžadováno. Potřebné k ochraně primárních klíčů při úpravách tabulky. V opačném případě, pokud při editaci dojde k duplikaci primárních klíčů, pak při vložení volby IGNOROVAT zůstane v editované tabulce první řádek s primárním klíčem Ostatní primární klíče. Ve výchozím nastavení tuto možnost vynecháváme.

Existují volitelné možnosti LOW_PRIORITY a DELAYED. Určují priority pro přidávání informací do databáze. První specifikuje čekání na uvolnění databáze, druhý znamená ukládání informací do vyrovnávací paměti.

Řádek v dotazu: INSERT s frází VALUES vám umožní přidat jeden řádek do databázové tabulky. Klauzule VALUES obsahuje hodnoty těchto dat.

Místo fráze VALUES lze zadat poddotazy. INSERT s poddotazem přidá do tabulky řádky vrácené poddotazem. Databázový server zpracuje poddotaz a vloží všechny vrácené řádky do tabulky. Server nevkládá řádky, pokud je nevybere poddotaz.

  • subquery_1 - subdotaz, který server zpracovává stejným způsobem jako pohled
  • subquery_2 je poddotaz, který vrací řádky vložené do tabulky. Seznam tohoto poddotazu musí mít stejný počet sloupců jako seznam sloupců INSERT.

Poddotazy se v databázi MySQL prakticky nepoužívají.

Příklady SQL dotazu INSERT INTO v databázi MySQL

Nové řádky vkládáme do databáze MySQL pomocí příkazu INSERT INTRO.

První příklad.

Vložte nové řádky do tabulky název_tabulky.

INSERT INTO název_tabulky VALUES ('2′,'145′,'1′,'název');

To znamená, že do sloupců tabulky název_tabulky chceme vložit hodnoty 2,145,1,name. Vzhledem k tomu, že sloupce nejsou specifikovány, jsou hodnoty vyplněny ve všech sloupcích tabulky.

Příklad dva.

Vložte informace do požadovaných (zadaných) sloupců tabulky název_tabulky.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [e-mail chráněný]'), ('jméno2', 'podjméno2',' [e-mail chráněný]′), ('jméno3′, 'podjméno3′,(' [e-mail chráněný]′);

Igor Serov zejména pro web "".

Kromě výše popsaného příkazu SELECT obsahuje jazyk DML (Data Manipulation Language) tři další příkazy: INSERT, UPDATE a DELETE. Stejně jako příkaz SELECT fungují tyto tři příkazy buď s tabulkami, nebo s pohledy. Tento článek popisuje příkaz INSERT a další dva příkazy jsou popsány v dalším článku.

příkaz INSERT vloží řádky (nebo části řádků) do tabulky. Existují dvě různé formy tohoto pokynu:

INSERT název_tabulky [(sloupec_seznam)] VÝCHOZÍ HODNOTY | HODNOTY (( DEFAULT | NULL | výraz ) [ ,...n]) INSERT INTO název_tabulky | jméno_zobrazení [(seznam_sloupec)] (výpis_výběr | příkaz_provedení) Konvence syntaxe

První forma instrukce umožňuje vložit do tabulky jeden řádek (nebo jeho část). A druhá forma příkazu INSERT umožňuje vložit do tabulky sadu výsledků příkazu SELECT nebo uloženou proceduru provedenou příkazem EXECUTE. Uložená procedura musí vrátit data, která mají být vložena do tabulky. Při použití s ​​příkazem INSERT může příkaz SELECT vybrat hodnoty z jiné nebo stejné tabulky, do které se data vkládají, pokud jsou datové typy odpovídajících sloupců kompatibilní.

U obou formulářů musí být datový typ každé vložené hodnoty kompatibilní s datovým typem odpovídajícího sloupce tabulky. Všechny řetězce a dočasná data musí být uzavřena v uvozovkách; Číselné hodnoty není nutné uzavírat do uvozovek.

Vložení jednoho řádku

U obou forem příkazu INSERT je explicitní uvedení seznamu sloupců volitelné. Neuvedení sloupců je stejné jako zadání všech sloupců v tabulce.

parametr DEFAULT VALUES vloží výchozí hodnoty pro všechny sloupce. Sloupce s datovým typem TIMESTAMP nebo vlastností IDENTITY jsou standardně vloženy s hodnotami, které jsou automaticky generovány systémem. Pro sloupce jiných datových typů se vloží odpovídající výchozí hodnota bez nuly, pokud je k dispozici, nebo v opačném případě NULL. Pokud sloupec nepovoluje hodnoty null a nemá definovanou výchozí hodnotu, příkaz INSERT selže a zobrazí se zpráva.

Níže uvedený příklad vkládá řádky do tabulky Zaměstnanec v databázi SampleDb, což ukazuje použití příkazu INSERT k vložení malého množství dat do databáze:

POUŽÍVEJTE SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES (38640, "Alexey", "Vasin", "d3");

Existují dva různé způsoby, jak vložit hodnoty do nového řádku. Příkaz INSERT v níže uvedeném příkladu výslovně používá klíčové slovo NULL a vloží hodnotu NULL do odpovídajícího sloupce:

POUŽÍVEJTE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Chcete-li vložit hodnoty do některých (ale ne všech) sloupců tabulky, musíte tyto sloupce obvykle explicitně určit. Nespecifikované sloupce musí povolovat hodnoty NULL nebo mít definovanou výchozí hodnotu.

POUŽÍVEJTE SampleDb; INSERT INTO Employee(Id, First Name, LastName) VALUES (34992, "Andrey", "Batonov");

Předchozí dva příklady jsou ekvivalentní. V tabulce Employee je jediným sloupcem, který umožňuje hodnoty NULL, sloupec DepartmentNumber a všechny ostatní sloupce byly zakázány klauzuli NOT NULL v příkazu CREATE TABLE.

Pořadí hodnot v Nabídka VALUES Příkazy INSERT se mohou lišit od pořadí určeného v příkazu CREATE TABLE. V tomto případě se jejich pořadí musí shodovat s pořadím, ve kterém jsou odpovídající sloupce uvedeny v seznamu sloupců. Níže je uveden příklad vkládání dat v jiném pořadí, než bylo původní:

POUŽÍVEJTE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, First Name) VALUES ("d1", "Batonov", 34993, "Andrey");

Vkládání více řádků

Druhá forma příkazu INSERT vloží do tabulky jeden nebo více řádků vybraných poddotazem. Níže uvedený příklad ukazuje, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr čísel a jmen oddělení umístěných v Moskvě a výsledná sada výsledků se načte do nové tabulky vytvořené dříve.

Nová tabulka MoscowDepartment vytvořená ve výše uvedeném příkladu má stejné sloupce jako existující tabulka Department, s výjimkou chybějícího sloupce Location. Poddotaz v příkazu INSERT vybere všechny řádky v tabulce oddělení, pro které je hodnota sloupce Umístění "Moskva", které se pak vloží do nové tabulky vytvořené na začátku dotazu.

Níže uvedený příklad ukazuje další způsob, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr personálních čísel, čísel projektů a data zahájení projektu pro všechny zaměstnance na pozici „Manažer“, kteří pracují na projektu p2, a poté načte výslednou sadu výsledků do nové tabulky vytvořené na začátku roku dotaz:

USE SampleDb; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Před vložením řádků pomocí příkazu INSERT byly tabulky MoscowDepartment a ManagerTeam (ve výše uvedených příkladech) prázdné. Pokud by tabulka již existovala a obsahovala řádky s daty, byly by do ní přidány nové řádky.

Ahoj všichni! Tento článek bude diskutovat o tom, jak můžete přidat data do tabulky v Microsoft SQL Server, pokud jste již alespoň trochu obeznámeni s jazykem T-SQL, pak jste si pravděpodobně uvědomili, že nyní budeme mluvit o příkazu INSERT a také o tom, jak jej lze použít k přidání dat do tabulky.

Začněme jako obvykle trochou teorie.

Příkaz INSERT v T-SQL

VLOŽIT je instrukce T-SQL, která je určena k přidávání dat do tabulky, tzn. vytváření nových záznamů. Tento pokyn lze použít jak pro přidání jednoho řádku do tabulky, tak pro hromadné vkládání dat. Příkaz INSERT vyžaduje oprávnění k vložení dat ( VLOŽIT) do cílové tabulky.

Existuje několik způsobů, jak použít příkaz INSERT na část dat, která je třeba vložit:

  • Výpis konkrétních hodnot k vložení;
  • Zadání datové sady jako SELECT dotazu;
  • Zadání datové sady ve formě volání procedury, která vrací tabulková data.

Zjednodušená syntaxe

INSERT [tabulka] ( seznam sloupců...) HODNOTY ( seznam hodnot, … ) Nebo VYBRAT vzorová žádost Nebo EXECUTE postup

  • INSERT INTO je příkaz pro přidání dat do tabulky;
  • Tabulka je název cílové tabulky, do které chcete vložit nové záznamy;
  • Seznam sloupců je seznam názvů sloupců tabulky, do kterých budou data vložena, oddělených čárkami;
  • VALUES je konstruktor hodnot tabulky, pomocí kterého určujeme hodnoty, které budeme vkládat do tabulky;
  • Seznam hodnot jsou hodnoty, které budou vloženy, oddělené čárkami. Jsou uvedeny v pořadí, v jakém se sloupce objevují v seznamu sloupců;
  • SELECT je dotaz pro výběr dat pro vložení do tabulky. Sada výsledků, kterou dotaz vrátí, musí odpovídat seznamu sloupců;
  • EXECUTE je volání procedury k získání dat pro vložení do tabulky. Sada výsledků, kterou vrátí uložená procedura, musí odpovídat seznamu sloupců.

Zhruba takto vypadá zjednodušená syntaxe příkazu INSERT INTO ve většině případů, takto budete přidávat nové záznamy do tabulek.

Seznam sloupců, do kterých budete vkládat data, není třeba psát, v takovém případě se jejich pořadí určí na základě skutečného pořadí sloupců v tabulce. Toto pořadí si musíte pamatovat, když zadáváte hodnoty pro vložení nebo píšete dotaz k výběru. Osobně doporučuji ještě uvést seznam sloupců, do kterých plánujete přidávat data.

Nezapomeňte také, že seznam sloupců a seznam hodnot musí obsahovat tzv. povinné sloupce, které nemohou obsahovat hodnotu NULL. Pokud nejsou zadány a sloupec nemá výchozí hodnotu, dojde k chybě.

Rád bych také poznamenal, že datový typ hodnot, které budete vkládat, musí odpovídat datovému typu sloupce, do kterého bude tato hodnota vložena, nebo alespoň podporovat implicitní převod. Ale radím vám, abyste kontrolovali typ dat ( formát) hodnoty, a to jak v seznamu hodnot, tak v dotazu SELECT.

Dost teorie, přejděme k praxi.

Počáteční údaje

Abychom do tabulky přidali data, potřebujeme samotnou tabulku, tak si ji vytvořte a zkusme do ní přidat záznamy.

Poznámka! Všechny příklady budou spuštěny v Microsoft SQL Server 2016 Express.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)

Naše testovací tabulka bude obsahovat seznam produktů s cenami.

Také v příkladech použijeme proceduru, která vrací hodnotu tabulky pro přidání dat do tabulky, takže si ji vytvořte také.

CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END

Například vrátí data z nově vytvořené tabulky TestTable.

Poznámka!

Jak víte, čtení tohoto materiálu předpokládá určitou znalost jazyka T-SQL, takže pokud vám něco není jasné, doporučuji vám seznámit se s následujícími materiály:

Příklad 1 – Přidání nového záznamu do tabulky pomocí konstruktoru hodnoty tabulky

Nejprve zkusme přidat jeden záznam a hned se podíváme na výsledek, tzn. Napíšeme žádost o vzorek.

INSERT INTO TestTable(ProductName, Price) VALUES ("Computer", 100) GO SELECT * FROM TestTable

Vidíte, že za názvem tabulky jsme uvedli názvy sloupců, do kterých budeme data přidávat, oddělené čárkami, poté jsme uvedli klíčové slovo HODNOTY a v závorkách jsme také ve stejném pořadí, odděleni čárkami, napsali hodnoty, které chceme vložit.

Po příkazu INSERT jsem napsal příkaz SELECT a oddělil je příkazem GO.

Nyní si představme, že potřebujeme přidat pár řádků. K tomu sepíšeme následující žádost.

INSERT INTO TestTable(ProductName, Price) VALUES ("Počítač", 100), ("Klávesnice", 20), ("Monitor", 50) PŘEJÍT VYBRAT * Z TestTable


Příklad 2 – Přidání nových řádků do tabulky pomocí SELECT dotazu

Velmi často je potřeba do tabulky přidat spoustu dat například na základě výběrového dotazu, tzn. VYBRAT. K tomu stačí místo VALUES zadat požadavek.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >


V v tomto příkladu psali jsme VYBRAT dotaz, která vrací data z tabulky TestTable, ale ne všechna, ale pouze ta s identifikátorem větším než 2. A výsledek byl vložen do stejné tabulky TestTable.

Jako příklad toho, jak můžete přidat záznamy do tabulky bez uvedení seznamu sloupců, napíšeme další dotaz na vložení dat, který bude dělat přesně to samé jako dotaz výše, jen nebude vypisovat sloupce k vložení.

INSERT INTO TestTable SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable


V tomto případě jsme si jisti, že v tabulce TestTable je první sloupec ProductName a druhý je Cena, takže si to můžeme dovolit takto napsat. V praxi je ale opět lepší zadat seznam sloupců.

Pokud jste si všimli, ve všech příkladech jsem neuvedl sloupec Id, ale máme jej, od té doby nedošlo k žádné chybě tento sloupec s vlastností IDENTITY automaticky generuje identifikátory, takže data do takového sloupce prostě vložit nemůžete.

Příklad 3 - Přidání nových záznamů do tabulky pomocí uložené procedury

Nyní do tabulky vložíme data, která nám uložená procedura vrátí. Význam je zde stejný, místo VALUES a místo požadavku označujeme volání procedury. Ale jak víte, pořadí a počet sloupců vrácených procedurou musí přesně odpovídat seznamu sloupců, které mají být vloženy ( i když není uveden seznam sloupců).

INSERT INTO TestTable (ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


Doufám, že vám tento materiál pomohl pochopit pokyny. VLOŽ DO, a to je zatím vše, co mám!