-- 1. Vytvorte databazu CislaDB s tabulkou Cisla s jednym celociselnym stlpcom. USE master; GO -- GO oddeluje bloky prikazov. Jeden blok sa posle ako jeden batch na server. Nie je to sucast T-SQL jazyka. -- Ak by sme chceli vykonat vsetky prikazy z tohto prikazu, tak do servera sa budu posielat cele GO -- bloky. Potom ked budeme vytvarat premenne, tak premenna z jedneho GO bloku nebude viditelna v inom GO bloku -- Vymazanie databazy v SQL Server 2016+ DROP DATABASE IF EXISTS CislaDB; GO -- Prikaz nizsie vsak SQL Server nepozna. -- CREATE DATABASE IF NOT EXISTS CislaDB; CREATE DATABASE CislaDB; -- Vymazanie a vytvorenie databazy vo vsetkych verziach IF DB_ID('CislaDB') IS NOT NULL DROP DATABASE CislaDB; --dajte refresh v Object Exploreri, pribudne tam CislaDB GO --Aku databazu pouzivame? SELECT DB_NAME(); GO --prepneme sa na CislaDB USE CislaDB; GO -- Vytvorenie tabulky. -- Funkcia OBJECT_ID berie na vstup nazov objektu a jeho typ, kde U - User Table IF OBJECT_ID('Cisla', 'U') IS NOT NULL DROP TABLE Cisla; GO IF OBJECT_ID('Cisla', 'U') IS NULL CREATE TABLE Cisla ( cislo INT ); GO -- Premenujme databazu CislaDB na databazu Cisla pomocou ALTER ALTER DATABASE CislaDB MODIFY Name = Cisla; GO --Premenujme databazu Cisla na databazu CislaDB pomocou systemovej procedury execute sp_renamedb 'Cisla','CislaDB' GO --===============================================================================================-- -- 2. Pomocou cyklu naplnte tabulku Cisla cislami od 1 do 100. USE CislaDB; GO -- Pouzitie globalnych premennych @@x -- Server name SELECT @@SERVERNAME -- SQL Server Version SELECT @@VERSION -- SQL Server Instance SELECT @@ServiceName -- Current Database SELECT DB_NAME(); GO --deklarovanie lokalnej premennej, platnej v jednom GO bloku DECLARE @i INT = 1; WHILE @i <= 100 BEGIN INSERT Cisla VALUES (@i); SET @i = @i + 1; END; SELECT @i; SELECT * FROM Cisla; GO --Premenne su platne --a) v ramci jedneho bloku prikazov oddelenej prikazom GO --b) pocas vykonania prikazov -- Premenna @i bola deklarovana v predchadzajucom bloku a teraz je uz neplatna. SELECT @i; --===============================================================================================-- -- 3. Do premennej ulozte cisla z tabulky Cisla mensie ako 20. DECLARE @mensieAko20 TABLE(cislo INT); INSERT INTO @mensieAko20 SELECT cislo FROM Cisla WHERE cislo < 20; SELECT * FROM @mensieAko20; GO --===============================================================================================-- -- 4. Do lokalne docasnej tabulky ulozte parne cisla z Cisla. IF OBJECT_ID('tempdb..#Parne', 'U') IS NOT NULL DROP TABLE #Parne; IF OBJECT_ID('#Parne', 'U') IS NULL CREATE TABLE #Parne (cislo INT); GO INSERT #Parne SELECT cislo FROM Cisla WHERE cislo % 2 = 0; SELECT * FROM #Parne; -- skratene IF OBJECT_ID('tempdb..#Parne2', 'U') IS NOT NULL DROP TABLE #Parne2; GO SELECT cislo INTO #Parne2 FROM Cisla WHERE cislo % 2 = 0; SELECT * FROM #Parne2; GO -- Tabulkova premenna vs. lokalne docasna tabulka: -- (Tabulkova) Premenna existuje iba medzi dvoma GO prikazmi alebo iba v ramci procedury. -- Lokalne docasna tabulka existuje pocas prihlasenia uzivatela ktory ju vytvoril. -- Lokalne docasna tabulku sa odporuca, ak su data velke. -- Vsetky docasne tabulky su ulozene v systemovej databaze tempdb. --===============================================================================================-- -- 5. Do globalne docasnej tabulky ulozte neparne cisla z Cisla. IF OBJECT_ID('tempdb..##Neparne', 'U') IS NOT NULL DROP TABLE ##Neparne; GO SELECT cislo INTO ##Neparne FROM Cisla WHERE cislo % 2 = 1; SELECT * FROM ##Neparne; GO -- Lokalne docasna tabulka vs. globalne docasna tabulka: -- Ku globalne docasnej tabulke mozu pristupovat aj iny pouzivatelia. -- Globalne docasna tabulka existuje pocas prihlasenia aspon jedneho uzivatela, ktory ju referencuje. --===============================================================================================-- -- 6. Do docasne "permanentnej" tabulky ulozte cisla z Cisla delitelne 3. USE tempdb; GO IF OBJECT_ID('Delitelne3', 'U') IS NOT NULL DROP TABLE Delitelne3; GO IF OBJECT_ID('Delitelne3', 'U') IS NULL CREATE TABLE Delitelne3(cislo INT); GO INSERT Delitelne3 SELECT cislo FROM CislaDB..Cisla WHERE cislo % 3 = 0; SELECT * FROM Delitelne3; GO -- Globalne docasna tabulka vs. docasne permanentna tabulka: -- Ku docas. perm. tabulke mozu pristupovat aj iny pouzivatelia podobne ako ku glob. tabulke. -- Docas. perm. tabulka exituje aj po odhlaseni vsetkych uzivatelov, pricom sa zmaze az -- restartovanim DB servera. --===============================================================================================--