Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine temporäre Tabelle basierend auf einer anderen Tabelle in SQL Server

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)