sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en tillfällig tabell baserad på en annan tabell i SQL Server

I SQL Server kan du skapa en temporär tabell baserad på en annan tabell genom att använda SELECT... INTO syntax.

Du kan skapa tabellen med eller utan data. Du kan med andra ord kopiera data från den ursprungliga tabellen om du vill, eller så kan du skapa tabellen utan några data.

Exempel 1 – Skapa tabell med data

Här är ett exempel på att skapa en temporär tabell baserad på en beständig tabell och kopiera all data i processen.

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

Låt oss se resultatet.

SELECT * FROM #TempCatsAllData;

Resultat:

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

Du kan också filtrera data med en WHERE klausul om du behöver.

Exempel 2 – Skapa tabell utan data

Här är ett exempel på hur du skapar en tabell utan data.

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

I det här exemplet använder jag WHERE 1 = 0 för att inte returnera några data.

Exempel 3 – Kontrollera tabellerna

I det här exemplet jämför jag de två temporära tabellerna med den ursprungliga tabellen. Jag gör detta genom att fråga sys.columns katalogvy i den ursprungliga databasen (för den ursprungliga tabellen) och i tempdb databas (för de temporära tabellerna).

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. Att nå 2100 parametergränsen (SQL Server) när du använder Contains()

  2. Hur man ansluter till AWS MySQL / MariaDB RDS eller EC2 Database från MySQL WorkBench

  3. Varför skapar man en vy i en databas?

  4. SQL SKAPA TABELL för nybörjare