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)