sql >> Database >  >> RDS >> Sqlserver

Een tijdelijke tabel maken op basis van een andere tabel in SQL Server

In SQL Server kunt u een tijdelijke tabel maken op basis van een andere tabel met behulp van de SELECT... INTO syntaxis.

U kunt de tabel met of zonder gegevens maken. Met andere woorden, u kunt desgewenst gegevens uit de originele tabel kopiëren, of u kunt de tabel zonder gegevens maken.

Voorbeeld 1 – Tabel maken met gegevens

Hier is een voorbeeld van het maken van een tijdelijke tabel op basis van een persistente tabel en het kopiëren van alle gegevens in het proces.

USE Test;
SELECT 
  CatId,
  CatName,
  Phone
INTO #TempCatsAllData
FROM dbo.Cats;

Laten we het resultaat bekijken.

SELECT * FROM #TempCatsAllData;

Resultaat:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 1       | Garfield  | 9871237654 |
| 2       | Felix     | 8871237651 |
| 3       | Tom       | 7871237652 |
| 4       | Fetch     | 6871237653 |
+---------+-----------+------------+

U kunt de gegevens ook filteren met een WHERE clausule als dat nodig is.

Voorbeeld 2 – Tabel maken zonder gegevens

Hier is een voorbeeld van het maken van een tabel zonder gegevens.

USE Test;
SELECT 
  CatId,
  CatName,
  Phone
INTO #TempCatsNoData
FROM dbo.Cats
WHERE 1 = 0;

In dit voorbeeld gebruik ik WHERE 1 = 0 om geen gegevens terug te sturen.

Voorbeeld 3 – Controleer de tabellen

In dit voorbeeld vergelijk ik de twee tijdelijke tabellen met de originele tabel. Ik doe dit door de sys.columns . te doorzoeken catalogusweergave in de originele database (voor de originele tabel) en in de tempdb database (voor de tijdelijke 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%';

Resultaat:

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)

  1. Zijn externe sleutels echt nodig in een database-ontwerp?

  2. Hoe kan ik een tabel in Oracle beschrijven zonder de opdracht DESCRIBE te gebruiken?

  3. Grondbeginselen van tabeluitdrukkingen, deel 12 - Inline tabelwaardige functies

  4. Hoe relaties te creëren in MySQL