Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Utwórz tabelę tymczasową w SQL Server

W SQL Server tymczasowe tabele są tworzone przy użyciu tej samej CREATE TABLE składnia jak zwykłe tabele. Różnica polega na tym, że nazwy tabel tymczasowych są poprzedzone jednym lub dwoma znakami liczbowymi (# ), w zależności od tego, czy jest to lokalna tabela tymczasowa, czy globalna tabela tymczasowa:

  • Lokalne tabele tymczasowe są poprzedzone pojedynczym znakiem cyfry (# )
  • Globalne tabele tymczasowe są poprzedzone podwójnym znakiem cyfry (## )

Przykład 1 – Utwórz lokalną tabelę tymczasową

Oto przykład tworzenia lokalnej tabeli tymczasowej:

CREATE TABLE #Cats (
    CatId int PRIMARY KEY,
    CatName varchar(70)
);

Nazwa określona dla lokalnej tabeli tymczasowej może mieć maksymalnie 116 znaków. Inne typy tabel mogą mieć 128 znaków, ale lokalne tabele tymczasowe są automatycznie dodawane z przyrostkiem liczbowym generowanym przez system.

Przykład 2 – Utwórz globalną tabelę tymczasową

Oto przykład tworzenia globalnej tabeli tymczasowej:

CREATE TABLE ##Cats (
    CatId int PRIMARY KEY,
    CatName varchar(70)
);

Globalne nazwy tabel tymczasowych mogą mieć maksymalnie 128 znaków. SQL Server nie dołącza generowanego przez system sufiksu liczbowego do globalnych tabel tymczasowych, tak jak ma to miejsce w przypadku lokalnych tabel tymczasowych, dzięki czemu można wykorzystać całe miejsce.

Przykład 3 – Wyświetl tabele tymczasowe

Mogę uruchomić następujące zapytanie, aby zobaczyć moje nowo utworzone tabele tymczasowe.

SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#Cats%'
OR name = '##Cats';

Wynik:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
+----------------------------------------------------------------------------------------------------------------------------------+

Widzimy, że lokalna tabela tymczasowa ma dodany sufiks liczbowy wygenerowany przez system i dlatego moje zapytanie używa LIKE operator dla tej tabeli.

Przykład 4 – Nowa sesja

Jeśli otworzę nową sesję, utworzę lokalną tabelę tymczasową o tej samej nazwie (Cats), a następnie ponownie uruchomię to zapytanie, otrzymuję to:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
| #Cats_______________________________________________________________________________________________________________000000000019 |
+----------------------------------------------------------------------------------------------------------------------------------+

Tak więc wiele sesji może utworzyć lokalną tabelę o tej samej nazwie, ponieważ SQL Server modyfikuje tę nazwę, zwiększając przyrostek.

Przykład 5 – Ta sama sesja

Jeśli jednak spróbuję ponownie utworzyć lokalną tabelę tymczasową w tym samym sesja, rozumiem:

Msg 2714, Level 16, State 6, Line 1
There is already an object named '#Cats' in the database.

A jeśli otworzę kolejną sesję, to się udaje, a kiedy zapytam tempdb.sys.tables Rozumiem:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
| #Cats_______________________________________________________________________________________________________________000000000019 |
| #Cats_______________________________________________________________________________________________________________00000000001B |
+----------------------------------------------------------------------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między bazą danych a schematem

  2. Utwórz wyzwalacz DML w SQL Server

  3. Jak zaszyfrować widok w SQL Server

  4. CURRENT_TIMESTAMP Przykłady w SQL Server (T-SQL)

  5. Jaki jest dobry sposób na usunięcie wszystkich białych znaków z ciągu w T-SQL bez UDF i bez CLR?