sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte dočasnou tabulku na serveru SQL Server

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 |
+----------------------------------------------------------------------------------------------------------------------------------+

  1. Získejte nejnovější datum ze seskupených dat MySQL

  2. SQL Server – Odeberte všechny netisknutelné znaky ASCII

  3. Procedura očekává parametr, který nebyl zadán

  4. Podporuje PostgreSQL kolace bez přízvuku?