V SQL Server, dočasná tabulka je určitý druh tabulky, která existuje, dokud není mimo rozsah (pokud není výslovně zrušena).
To se liší od běžné (trvalé) tabulky, kde běžná tabulka trvale existuje ve vaší databázi, dokud ji výslovně nezrušíte.
Výhody dočasných tabulek
Dočasné tabulky mohou být užitečné v době, kdy potřebujete spustit více dotazů proti podmnožině větší sady výsledků. Můžete použít SELECT... INTO
s WHERE
klauzule k umístění podmnožiny dat do dočasné tabulky. Poté můžete spouštět dotazy proti této dočasné tabulce. To vám ušetří nutnost neustále filtrovat data z větší sady výsledků při vytváření více dotazů.
Dočasné tabulky mohou být také užitečné z hlediska oprávnění. Pokud potřebujete pracovat s daty z perzistentní tabulky, ale nemáte dostatečná oprávnění k provádění všech operací, které potřebujete, můžete tato data zkopírovat do dočasné tabulky (za předpokladu, že máte přístup pro čtení) a udělat vše, co potřebujete. .
Dočasné tabulky lze také použít, pokud nemáte oprávnění k vytvoření (trvalé) tabulky v aktuální databázi.
Dalším užitečným aspektem dočasných tabulek je to, že je můžete použít ke spouštění rychlých ad-hoc dotazů při provádění testu, předvádění konceptu atd., aniž byste se museli obávat, že zanecháte stopu perzistentních tabulek, které jste zapomněli odstranit.
TempDB
Dočasné tabulky se vytvářejí v TempDB databáze. Toto je systémová databáze, která ukládá dočasné uživatelské objekty, jako jsou dočasné tabulky a indexy, dočasně uložené procedury, proměnné tabulky, tabulky vrácené ve funkcích s hodnotou tabulky a kurzory. Ukládá také interní objekty vytvořené databázovým strojem a ukládá verze.
Každý uživatel může vytvářet dočasné tabulky v TempDB . Pro TempDB nemusíte konfigurovat žádná zvláštní oprávnění přístup.
Syntaxe
Dočasné tabulky se vytvářejí pomocí stejné syntaxe jako běžné tabulky. Rozdíl je v tom, že dočasné tabulky mají předponu buď jeden, nebo dva číselné znaky (#
):
- Místní dočasné tabulky mají předponu s jedním číselným znakem (např.
#table_name
) - Globální dočasné tabulky mají předponu dvojitého čísla (např.
##table_name
)
Příklad vytvoření místního dočasná tabulka:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Příklad vytvoření globálního dočasná tabulka:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Místní dočasné tabulky jsou viditelné pouze v aktuální relaci a globální dočasné tabulky jsou viditelné pro všechny relace.
Jak dlouho trvá dočasný stůl?
Dočasné tabulky jsou automaticky zrušeny, když přejdou mimo rozsah.
Dočasnou tabulku můžete také explicitně zrušit pomocí DROP TABLE
.
Kdy přesně je dočasná tabulka automaticky zrušena, závisí na tom, zda je dočasná tabulka lokální nebo globální a zda je nebo není vytvořena v uložené proceduře.
- Místní :Lokální dočasná tabulka vytvořená v uložené proceduře je po dokončení uložené procedury automaticky zrušena. Na tabulku mohou odkazovat libovolné vnořené uložené procedury provedené uloženou procedurou, která tabulku vytvořila. Na tabulku nemůže odkazovat proces, který volal uloženou proceduru, která tabulku vytvořila.
Všechny ostatní místní dočasné tabulky jsou na konci aktuální relace automaticky zrušeny.
- Globální :Globální dočasné tabulky jsou automaticky zrušeny, když relace, která tabulku vytvořila, skončí a všechny ostatní úkoly na ně přestanou odkazovat. Asociace mezi úlohou a tabulkou je zachována pouze po dobu trvání jednoho příkazu T-SQL. To znamená, že globální dočasná tabulka je zrušena po dokončení posledního příkazu T-SQL, který na tabulku aktivně odkazoval, když relace vytváření skončila.
Schéma
Všechny dočasné tabulky jsou vytvořeny v dbo schéma. Pokud explicitně určíte jiné schéma, bude ignorováno.
Zahraniční klíče
Omezení FOREIGN KEY se u dočasných tabulek nevynucují. Pokud zadáte cizí klíč, tabulka se stále vytvoří, akorát bez cizího klíče. Bude vrácena zpráva, která vás o tom informuje.