In SQL Server können Sie eine temporäre Tabelle basierend auf einer anderen Tabelle erstellen, indem Sie SELECT... INTO
verwenden Syntax.
Sie können die Tabelle mit oder ohne Daten erstellen. Mit anderen Worten, Sie können Daten aus der ursprünglichen Tabelle kopieren, wenn Sie möchten, oder Sie können die Tabelle ohne Daten erstellen.
Beispiel 1 – Tabelle mit Daten erstellen
Hier ist ein Beispiel für das Erstellen einer temporären Tabelle basierend auf einer persistenten Tabelle und das Kopieren aller Daten im Prozess.
USE Test; SELECT CatId, CatName, Phone INTO #TempCatsAllData FROM dbo.Cats;
Sehen wir uns das Ergebnis an.
SELECT * FROM #TempCatsAllData;
Ergebnis:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Sie können die Daten auch mit einem WHERE
filtern Klausel, falls erforderlich.
Beispiel 2 – Tabelle ohne Daten erstellen
Hier ist ein Beispiel für das Erstellen einer Tabelle ohne Daten.
USE Test; SELECT CatId, CatName, Phone INTO #TempCatsNoData FROM dbo.Cats WHERE 1 = 0;
In diesem Beispiel verwende ich WHERE 1 = 0
keine Daten zurückzugeben.
Beispiel 3 – Überprüfen Sie die Tabellen
In diesem Beispiel vergleiche ich die beiden temporären Tabellen mit der Originaltabelle. Ich mache das, indem ich die sys.columns
abfrage Katalogansicht in der Originaldatenbank (für die Originaltabelle) und in der tempdb Datenbank (für die temporären Tabellen).
USE Test; SELECT name AS [Column Name], TYPE_NAME(user_type_id) AS [Data Type], max_length, [precision], scale, is_nullable FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Cats'; USE tempdb; SELECT name AS [Column Name], TYPE_NAME(user_type_id) AS [Data Type], max_length, [precision], scale, is_nullable FROM sys.columns WHERE OBJECT_NAME(object_id) LIKE '#TempCatsAllData%'; SELECT name AS [Column Name], TYPE_NAME(user_type_id) AS [Data Type], max_length, [precision], scale, is_nullable FROM sys.columns WHERE OBJECT_NAME(object_id) LIKE '#TempCatsNoData%';
Ergebnis:
Changed database context to 'Test'. +---------------+-------------+--------------+-------------+---------+---------------+ | Column Name | Data Type | max_length | precision | scale | is_nullable | |---------------+-------------+--------------+-------------+---------+---------------| | CatId | int | 4 | 10 | 0 | 0 | | CatName | varchar | 70 | 0 | 0 | 1 | | Phone | varchar | 10 | 0 | 0 | 1 | +---------------+-------------+--------------+-------------+---------+---------------+ (3 rows affected) Changed database context to 'tempdb'. +---------------+-------------+--------------+-------------+---------+---------------+ | Column Name | Data Type | max_length | precision | scale | is_nullable | |---------------+-------------+--------------+-------------+---------+---------------| | CatId | int | 4 | 10 | 0 | 0 | | CatName | varchar | 70 | 0 | 0 | 1 | | Phone | varchar | 10 | 0 | 0 | 1 | +---------------+-------------+--------------+-------------+---------+---------------+ (3 rows affected) +---------------+-------------+--------------+-------------+---------+---------------+ | Column Name | Data Type | max_length | precision | scale | is_nullable | |---------------+-------------+--------------+-------------+---------+---------------| | CatId | int | 4 | 10 | 0 | 0 | | CatName | varchar | 70 | 0 | 0 | 1 | | Phone | varchar | 10 | 0 | 0 | 1 | +---------------+-------------+--------------+-------------+---------+---------------+ (3 rows affected)