SQLShack (Čeština)

Tento článek pojednává o příkazu SQL SELECT INTO včetně syntaxe, parametry a použití s více tabulkami, skupinami souborů a podmínkou WHERE

Pravidelně vkládáme data do tabulek serveru SQL Server buď z aplikace, nebo přímo v SSMS. Data můžeme vložit pomocí příkazu INSERT INTO. Abychom to mohli udělat, měli bychom mít již zavedenou tabulku pro vložení dat do ní, protože nemůžeme vytvořit tabulku pomocí příkazu Vložit do příkazu.

Následující úkoly musíme provést pomocí příkazu INSERT INTO.

  • Vytvořte strukturu tabulky s příslušnými datovými typy
  • Vložte do ní data

Ale dobrá zpráva je, že můžeme udělat oba úkoly společně elegantně pomocí příkazu SQL SELECT INTO. Vytvoří tabulkovou strukturu pro sloupce vrácené příkazem Select.

Předpokládejme, že chceme aktualizovat mnoho záznamů v tabulce. Můžeme použít příkaz SELECT INTO k vytvoření záložní tabulky s existující strukturou od zdrojové tabulky. Prozkoumejme v tomto článku příkaz VÝBĚR DO.

Syntaxe příkazu VÝBER DO DO

1
2
3
4

VYBRAT sloupec1, sloupec2 .. .ColumnN
INTO New_table
FROM tables
;

Parametry v příkazu SELECT INTO

  • Seznam sloupců: Musíme určit sloupec, který chceme načíst a vložit do nové tabulky
  • Nová_tabulka: Zde můžeme zadat název nové tabulky. SQL Server vytvoří novou tabulku se sloupci uvedenými v seznamu sloupců. Tímto nemůžeme nahradit existující tabulku. Název tabulky by měl být jedinečný
  • Tabulky: Obsahuje tabulku, ze které chceme získávat záznamy. Můžeme mít zde definováno i několik tabulek se správnou klauzulí Připojit
  • KDE podmínky: Můžeme filtrovat záznamy pomocí klauzule Where. Jedná se o volitelnou klauzuli

Pojďme si pomocí příkladů prozkoumat příkaz SQL SELECT INTO.

Prostředí:

V tomto příkladu používáme ukázková databáze AdventureWorks2017. Předpokládejme, že chceme vybrat záznamy z tabulky a vytvořit novou tabulku pomocí příkazu SELECT INTO. Chceme vybrané sloupce pouze v nové tabulce. Spustíme výběrový příkaz na tabulce zaměstnanců se sloupci, které chceme mít.

Než provedeme SQL SELECT INTO můžeme pomocí příkazu sp_help ověřit, že tabulka Employee_Demo neexistuje v databázi AdventureWorks2017.

1

sp_help „..“

Na následujícím snímku obrazovky vidíme, že tabulka Employee_Demo v mé databázi neexistuje.

Pomocí následujícího dotazu vytvořte novou tabulku pomocí příkazu SELECT INTO.

V Azure Data Studio dostáváme následující výstupní zprávu. Můžete si všimnout, že počet ovlivněných řádků je 10. V dotazu jsme vybrali 10 nejlepších záznamů z tabulky zaměstnanců.

Můžeme přistupovat k datům z nově vytvořené tabulky Employee_Demo a ověřit, zda obsahuje stejné záznamy jako náš dřívější výběr.

V příkazu SQL SELECT INTO jsme nezadali žádné vlastnosti sloupce. Porovnejme sloupce zdrojové a cílové tabulky a jejich vlastnosti.

Můžeme spustit příkaz sp_help „tablename“ na tabulce Employee i Employee_Demo. Zkopíroval jsem výstup obou tabulek v aplikaci Excel (pro vybrané sloupce). Na následujícím snímku obrazovky můžete vidět, že datový typ sloupce a jejich vlastnosti jsou podobné.

V předchozím příkazu SQL INTO , z několika sloupců ve zdrojové tabulce (Employee) jsme připravili cílovou tabulku (Employee_Demo).

Vytvořme další tabulku se všemi sloupci v tabulce Employee s následujícím dotazem.

Na výstupu vidíme, že byl vložen 290 řádků do tabulky Employee_All.

Ověřili jsme, že SELECT INTO příkaz vytvoří novou tabulku se sloupci uvedenými v seznamu sloupců. Vytvoří podobný datový typ také v cílové tabulce.

Předpokládejme, že ve zdrojové tabulce máme primární a cizí klíče. Vytváří primární klíč a cizí klíč podobně jako zdrojová tabulka? Ne, příkaz SQL SELECT INTO nevytvoří v cílové tabulce žádné klíče. Pokud chceme, můžeme definovat klíče v cílové tabulce. Ověřte to v následující části.

V mém dřívějším příkladu obsahuje tabulka zaměstnanců primární a cizí klíč, který je na ní definován. Seznam existujících klíčů můžeme získat pomocí zobrazení INFORMATION_SCHEMA. Spusťte následující kód a vrátí existující primární a cizí klíč v tabulce zaměstnanců.

Vidíme, že tabulka zaměstnanců obsahuje primární a cizí klíče.

Zkopírovali jsme všechny sloupce v tabulce Employee_All z tabulky Employee. Musíme nyní zkontrolovat primární a cizí klíč v cílové tabulce.

Vidíme, že v cílové tabulce neobsahuje žádný klíč. Dává nám flexibilitu definovat klíče v cílové tabulce.

SQL SELECT INTO – vkládání dat z více tabulek

V předchozích příkladech jsme vytvořili tabulku pomocí příkazu SELECT INTO od jedné tabulky Zaměstnanec. Můžeme také spojit více tabulek a pomocí příkazu SELECT INTO vytvořit také novou tabulku s daty. V této části chceme spojit více tabulek dohromady. V následujícím dotazu jsme spojili následující tabulky společně v AdventureWorks2017.

Spustit následující dotaz. Poskytuje výsledky z více tabulek na základě podmínek spojení a zmíněných sloupců.

Provedeme dotaz a budeme sledovat výstup příkazu SQL SELECT INTO.

Chceme vytvořit tabulku s daty vrácenými pomocí výše uvedené tabulky. Provedeme příkaz SQL SELECT INTO.

Vytvoří se. tabulku a vložte do ní data. Můžeme ověřit záznamy v této tabulce příkazem select.

Vidíme, že můžete spojit více tabulek dohromady a vytvořit výstup tabulka pomocí příkazu SELECT INTO.

Nemusíme se starat o definování datových typů pro cílovou tabulku. Pokud chceme vytvořit tabulku ručně, musíme se podívat na datový typ každého sloupce a podle toho definovat datový typ. Pokud existuje nesoulad mezi datovými typy, můžete obdržet chybovou zprávu, jako je následující.

Chyba 1: Kvůli nesouladu v datových typech

Zpráva 245, úroveň 16, stav 1 „Řádek 1
Převod se nezdařil při převodu hodnoty varchar„ GG “na datový typ int.

Chyba 2: Zpráva 8152, úroveň 16, stav 30, řádek 2

Řetězec nebo by byla zkrácena binární data.

Tyto chyby se nám při vkládání dat pomocí příkazu SQL SELECT INTO nedostávají. Pomocí této metody však nemůžeme vložit data do existujících tabulek.

VYBRAT DO – specifikovat skupinu souborů

V předchozích částech jsme prozkoumali, že můžeme vytvořit novou tabulku a vložit do ní data pomocí příkazu SQL SELECT INTO ze stávajících tabulek. Vytvoří tabulku pouze ve výchozí skupině souborů. Nemůžeme určit konkrétní skupinu souborů, dokud nebude SQL Server 2016. V SQL Server 2017 můžeme určit konkrétní skupinu souborů, ve které by měla být vytvořena nová tabulka. SQL Server vytvoří novou tabulku v této konkrétní skupině souborů Ověřit tabulku. Pokud nezadáme žádné skupiny souborů na serveru SQL Server 2017 a novějším, vytvoří se tabulka ve výchozí skupině souborů.

Poznámka: Skupiny souborů nemůžeme určit v SQL SELECT INTO pro SQL Server 2016 a dříve.

Pojďme přidat novou skupinu souborů do databáze AdventureWorks2017. Klikněte pravým tlačítkem na databázi a přejděte do Filegroups.

Na této stránce Filegroup klikněte na Add FileGroup a zadejte název Filegroup.

Nyní klikněte na Soubory a zobrazí se seznam existujících databázových souborů (datový a logovací soubor), na této stránce přidejte nový datový soubor a z rozevíracího seznamu určete FileGroup. Měla by to být FileGroup, kterou jsme právě vytvořili.

Chceme vytvořit tabulku SQL v INSERTFILE Filegroup. Nenastavili jsme tuto skupinu souborů jako výchozí skupinu souborů.

V následujícím dotazu můžete vidět, že jsme zadali název skupiny souborů pomocí klauzule ON. Funguje podobně jako běžný příkaz SQL SELECT INTO s rozdílem ve skupině souborů.

1
2
3

vyberte * do person.person_temp
ON INSERTFILE –FILEGROUP JMÉNO
od person.person

Jakmile je tabulka vytvořena, spusťte na této nově vytvořené tabulce příkaz sp_help. Na následujícím snímku obrazovky můžeme ověřit, že je tabulka umístěna na INSERTFILE FileGroup. Je to skupina souborů, kterou jsme vytvořili dříve.

Můžeme to ověřit také z vlastností tabulky. Klikněte pravým tlačítkem na tabulku v SSMS. V sekci Úložiště vidíme požadovanou FileGroup.

VYBERTE DO DO s podmínkou Where

Předpokládejme, že chceme vytvořit tabulku s příkazem SQL SELECT INTO s několika záznamy. Můžeme použít klauzuli Where podobnou výroku select.V následujícím dotazu chceme vytvořit tabulku person.person_WC pro osobu, která má příjmení, je jako% Duf%.

1
2
3
4

vybrat * into person.person_WC
ON INSERTFILE – Verify table Filegroup
from person.person
where Lastname like „% Duf%“

Závěr

V tomto článku jsme prozkoumali SQL Příkaz SELECT INTO a jeho scénáře použití. Je to užitečný příkaz k vytvoření kopie tabulky bez zadání datových typů.

  • autor
  • poslední příspěvky
Jako certifikovaný MCSA a Microsoft Certified Trainer v Gurgaonu v Indii, se 13 lety zkušeností, pracuje Rajendra pro řadu velkých společností zaměřených na optimalizaci výkonu, monitorování, vysokou dostupnost a strategie a implementaci zotavení po katastrofě. Je autorem stovek autoritativních článků o SQL Serveru, Azure, MySQL, Linuxu, Power BI, ladění výkonu, AWS / Amazon RDS, Git a souvisejících technologiích, které si dosud prohlédlo více než 10 milionů čtenářů.
Je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma se svou 50dílnou sérií o skupinách dostupnosti na serveru SQL Server Always On. Na základě svého příspěvku pro komunitu SQL Server byl oceněn různými oceněními, včetně prestižního ocenění „Nejlepší autor roku“ průběžně v letech 2020 a 2021 na serveru SQLShack.
Raj se vždy zajímá o nové výzvy, takže pokud potřebujete poradit pomoc s jakýmkoli tématem obsaženým v jeho spisech, lze ho kontaktovat na adrese [email protected]
Zobrazit všechny příspěvky od Rajendra Gupta

Poslední příspěvky od Rajendry Gupty (zobrazit všechny)
  • Provádění drobných a hlavních upgradů verzí pro AWS RDS SQL Server – 29. ledna 2021
  • Nasazení instancí AWS RDS PostgreSQL – 27. ledna 2021
  • Migrace místních databází SQL na AWS RDS SQL Server pomocí AWS DMS – 25. ledna , 2021

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *