Na serveru SQL Server se dočasné tabulky vytvářejí pomocí stejné CREATE TABLE
syntaxe jako běžné tabulky. Rozdíl je v tom, že názvy dočasných tabulek mají předponu buď jeden nebo dva číselné znaky (#
), v závislosti na tom, zda se jedná o místní dočasnou tabulku nebo globální dočasnou tabulku:
- Místní dočasné tabulky jsou předponou s jedním číselným znakem (
#
) - Globální dočasné tabulky jsou uvozeny znakem dvojitého čísla (
##
)
Příklad 1 – Vytvoření místní dočasné tabulky
Zde je příklad vytvoření místní dočasné tabulky:
CREATE TABLE #Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Název, který zadáte pro lokální dočasnou tabulku, může mít maximálně 116 znaků. Jiné typy tabulek mohou mít 128 znaků, ale k místním dočasným tabulkám jsou automaticky připojeny systémem generované číselné přípony.
Příklad 2 – Vytvoření globální dočasné tabulky
Zde je příklad vytvoření globální dočasné tabulky:
CREATE TABLE ##Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Globální dočasné názvy tabulek mohou mít maximálně 128 znaků. SQL Server nepřipojuje ke globálním dočasným tabulkám číselnou příponu vygenerovanou systémem, jako je tomu u místních dočasných tabulek, takže můžete využít celý prostor.
Příklad 3 – Zobrazení dočasných tabulek
Mohu spustit následující dotaz a zobrazit mé nově vytvořené dočasné tabulky.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#Cats%' OR name = '##Cats';
Výsledek:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | +----------------------------------------------------------------------------------------------------------------------------------+
Vidíme, že k místní dočasné tabulce byla připojena systémem vygenerovaná číselná přípona, a proto můj dotaz používá LIKE
operátor pro tuto tabulku.
Příklad 4 – Nová relace
Pokud otevřu novou relaci, vytvořím místní dočasnou tabulku se stejným názvem (Cats), pak spustím tento dotaz znovu, dostanu toto:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | +----------------------------------------------------------------------------------------------------------------------------------+
Více relací tedy může vytvořit místní tabulku se stejným názvem, protože SQL Server tento název upravuje zvýšením přípony.
Příklad 5 – Stejná relace
Pokud se však pokusím znovu vytvořit místní dočasnou tabulku ve stejném session, chápu toto:
Msg 2714, Level 16, State 6, Line 1 There is already an object named '#Cats' in the database.
A pokud otevřu ještě další relaci, jsem úspěšný, a když zadá dotaz na tempdb.sys.tables
Chápu toto:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | | #Cats_______________________________________________________________________________________________________________00000000001B | +----------------------------------------------------------------------------------------------------------------------------------+