Lekce 4 - MS-SQL krok za krokem: Export
V minulé lekci, MS-SQL krok za krokem: Vkládání a mazání dat v tabulce, jsme si ukázali vkládání a mazání záznamů.
Dnes si MS-SQL tutoriálu vyzkoušíme vyexportovat naši databázi, což se nám bude jistě mnohokrát hodit.
Export (nebo také "záloha") je soubor s SQL příkazy, který nám může sloužit na zálohu či migraci databáze nebo jen její části.
Export můžeme rozdělit na:
- kompletní export - soubor bude obsahovat jak strukturu tabulek, tak i jejich data
- export struktury - soubor bude obsahovat pouze strukturu
databáze
- takový export může obsahovat všechny nebo pouze vybrané tabulky
- export dat - soubor bude obsahovat pouze data tabulek
- tabulky můžeme specifikovat
Nejprve musíme mít nějakou databázi s daty, abychom je
mohli exportovat. Pokud žádnou z minulých lekcí nemáme, můžeme si
databázi i tabulku Uzivatele
vytvořit podle této lekce. Pokud
nemáme žádné záznamy v tabulce Uzivatele
, můžeme si znovu
pár záznamů do tabulky Uzivatele
vložit tímto T-SQL
příkazem:
INSERT INTO [Uzivatele] ( [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES ('Jan', 'Novák', '1984-11-03', 17), ('Tomáš', 'Marný', '1989-02-01', 6), ('Josef', 'Nový', '1972-12-20', 9);
Máme v databázi tedy minimálně tři záznamy osob:

Export dat
Zkusme si nejprve exportovat data konkrétní tabulky. Nejjednodušeji to můžeme udělat tak, že si otevřeme data tabulky pomocí možnosti Show Table Data a poté klikneme buď na tlačítko Script v horní liště, anebo pravým tlačítkem myši do tabulky a zvolíme Script:

Po kliknutí na tlačítko Script se nám vygeneruje tento T-SQL script v novém okně:
SET IDENTITY_INSERT [dbo].[Uzivatele] ON INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (1, N'Jan', N'Novák', N'1984-11-03', 17) INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (2, N'Tomáš', N'Marný', N'1989-02-01', 6) INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (3, N'Josef', N'Nový', N'1972-12-20', 9) SET IDENTITY_INSERT [dbo].[Uzivatele] OFF
Script nejprve nastaví, aby bylo možné při vkládání záznamů určit
hodnotu sloupce Id
, který má nastavenou
Identity specification
. Poté už následují příkazy pro
vložení všech záznamů. V případě, že některé záznamy kopírovat
nechceme, tak jejich příkazy můžeme smazat.
Uložení scriptu do souboru
Tento script si můžeme uložit do souboru jednoduše kliknutím na tlačítko pro uložení souboru v horním panelu, nebo klávesovou zkratkou CTRL + S. Případně ho lze uložit rovnou při vytváření scriptu, kdy neklikneme na Script, ale na Script to File:

Script si uložíme někam do souboru, protože jej budeme
využívat pro budoucí import.
Export celé tabulky
Pokud chceme exportovat celou tabulku, tzn. jak data, tak i strukturu tabulky, tak je postup trochu složitější. Nejprve si databázi otevřeme v okně SQL Server Object Explorer. V okně Server Explorer na databázi klikneme pravým a zvolíme Browse in SQL Server Object Explorer:

SQL Server Object Explorer je nástroj, který stejně jako Server Explorer umožňuje práci s SQL databázemi ve VS. Na rozdíl od něj však obsahuje nějaké funkce navíc. Pokud vám tyto funkce nechybí, tak je jedno, který z těchto nástrojů používáte.
Zde když klikneme na tabulku pravým tlačítkem a zvolíme Script As, tak se nám nabídnou tři možnosti:
- CREATE To - vygeneruje T-SQL script na vytvoření tabulky
- DROP To - vygeneruje T-SQL script na smazání tabulky
- DROP And CREATE To - vygeneruje T-SQL script na smazání a následné znovuvytvoření tabulky
Všechny tyto možnosti dále pak nabízí:
- New Query Window - otevře vygenerovaný script v novém okně
- Clipboard - vloží vygenerovaný script do schránky
- File - uloží vygenerovaný script do souboru
My zvolíme DROP And CREATE To a následně New Query Window:

Budeme mít takovýto T-SQL script:
USE [DatabazeProWeb.MDF] GO /****** Object: Table [dbo].[Uzivatele] Script Date: 26.06.2021 15:48:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO DROP TABLE [dbo].[Uzivatele]; GO CREATE TABLE [dbo].[Uzivatele] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Jmeno] NVARCHAR (60) NOT NULL, [Prijmeni] NVARCHAR (60) NOT NULL, [DatumNarozeni] DATE NOT NULL, [PocetClanku] INT NOT NULL );
Tento script využijeme v situaci, kdy chceme exportovat pouze strukturu tabulky. Jelikož my však chceme exportovat současně i data, tak si jejich import musíme do něj vložit. Vrátíme se ke scriptu z předchozí ukázky, celý ho zkopírujeme (CTRL + C) a vložíme na konec nového scriptu (CTRL + V):
USE [DatabazeProWeb.MDF] GO /****** Object: Table [dbo].[Uzivatele] Script Date: 26.06.2021 15:48:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO DROP TABLE [dbo].[Uzivatele]; GO CREATE TABLE [dbo].[Uzivatele] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Jmeno] NVARCHAR (60) NOT NULL, [Prijmeni] NVARCHAR (60) NOT NULL, [DatumNarozeni] DATE NOT NULL, [PocetClanku] INT NOT NULL ); SET IDENTITY_INSERT [dbo].[Uzivatele] ON INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (1, N'Jan', N'Novák', N'1984-11-03', 17) INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (2, N'Tomáš', N'Marný', N'1989-02-01', 6) INSERT INTO [dbo].[Uzivatele] ([Id], [Jmeno], [Prijmeni], [DatumNarozeni], [PocetClanku]) VALUES (3, N'Josef', N'Nový', N'1972-12-20', 9) SET IDENTITY_INSERT [dbo].[Uzivatele] OFF
Script tedy definuje v jaké databázi se má tabulka vytvořit (výchozí je zdrojová databáze, při importu ji případně musíme změnit), smazání stejnojmenné tabulky (pokud existuje), vytvoření nové tabulky a vložení dat.
Script si opět uložíme někam do souboru pro budoucí import, např. pomocí CTRL + S.
Export celé databáze
Visual Studio umožňuje exportovat celou databázi jako tzv.
data-tier application (DAC), která se přenáší v rámci
balíčku DACPAC (soubor s příponou .dacpac
). V
podstatě je to formát pro přenos celých MS-SQL databází včetně
struktur všech tabulek a dat
v nich obsažených. DAC se kromě zálohy dá taktéž použít pro nasazení
databáze na vzdálený server nebo do Azure.
Balíček DACPAC vyexportujeme tak, že klikneme na databázi pravým tlačítkem v SQL Server Object Explorer a zvolíme Extract Data-tier Application...:

Otevře se nám tento dialog:

V tomto dialogu nejprve zvolíme umístění a název souboru, nejjednodušeji kliknutím na Browse.... Dále si můžeme zvolit, jestli chceme vyexportovat pouze strukturu celé databáze (Extract schema only), nebo jestli chceme vyexportovat i data (Extract schema and data). V případě druhé možnosti si můžeme vybrat konkrétní tabulky:

Export potvrdíme tlačítkem OK. Úspěšnost exportu se vypíše v okně Data Tools Operations:

V další lekci, MS-SQL krok za krokem: Import, si ukážeme import databáze.