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

Creare una tabella temporanea basata su un'altra tabella in SQL Server

In SQL Server puoi creare una tabella temporanea basata su un'altra tabella utilizzando SELECT... INTO sintassi.

È possibile creare la tabella con o senza dati. In altre parole, puoi copiare i dati dalla tabella originale, se lo desideri, oppure puoi creare la tabella senza alcun dato.

Esempio 1:creare una tabella con i dati

Ecco un esempio di creazione di una tabella temporanea basata su una tabella persistente e di copia di tutti i dati nel processo.

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

Vediamo il risultato.

SELECT * FROM #TempCatsAllData;

Risultato:

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

Puoi anche filtrare i dati con un WHERE clausola se necessario.

Esempio 2:creare una tabella senza dati

Ecco un esempio di creazione di una tabella senza dati.

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

In questo esempio, utilizzo WHERE 1 = 0 per non restituire alcun dato.

Esempio 3:controlla le tabelle

In questo esempio confronto le due tabelle temporanee con la tabella originale. Lo faccio interrogando sys.columns vista catalogo nel database originale (per la tabella originale) e nel tempdb database (per le tabelle temporanee).

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

Risultato:

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)