sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en midlertidig tabel baseret på en anden tabel i SQL Server

I SQL Server kan du oprette en midlertidig tabel baseret på en anden tabel ved at bruge SELECT... INTO syntaks.

Du kan oprette tabellen med eller uden data. Du kan med andre ord kopiere data fra den originale tabel, hvis du ønsker det, eller du kan oprette tabellen uden nogen data.

Eksempel 1 – Opret tabel med data

Her er et eksempel på oprettelse af en midlertidig tabel baseret på en vedvarende tabel og kopiering af alle data i processen.

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

Lad os se resultatet.

SELECT * FROM #TempCatsAllData;

Resultat:

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

Du kan også filtrere dataene med en WHERE klausul, hvis du har brug for det.

Eksempel 2 – Opret tabel uden data

Her er et eksempel på oprettelse af en tabel uden data.

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

I dette eksempel bruger jeg WHERE 1 = 0 at returnere ingen data.

Eksempel 3 – Tjek tabellerne

I dette eksempel sammenligner jeg de to midlertidige tabeller med den originale tabel. Jeg gør dette ved at forespørge sys.columns katalogvisning i den originale database (for den originale tabel) og i tempdb database (til de midlertidige tabeller).

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%';

Resultat:

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. Slet en databasepostkonto (SSMS)

  2. Knee-Jerk Vent-statistikker:SOS_SCHEDULER_YIELD

  3. Postgres vinduesfunktion og gruppe efter undtagelse

  4. Kan ikke oprette enhedsdatamodel - ved hjælp af MySql og EF6