Trong SQL Server, bạn có thể tạo một bảng tạm thời dựa trên một bảng khác bằng cách sử dụng SELECT... INTO
cú pháp.
Bạn có thể tạo bảng có hoặc không có dữ liệu. Nói cách khác, bạn có thể sao chép dữ liệu từ bảng gốc nếu muốn hoặc bạn có thể tạo bảng mà không có bất kỳ dữ liệu nào.
Ví dụ 1 - Tạo bảng với dữ liệu
Dưới đây là một ví dụ về cách tạo một bảng tạm thời dựa trên một bảng liên tục và sao chép tất cả dữ liệu trong quá trình này.
USE Test; SELECT CatId, CatName, Phone INTO #TempCatsAllData FROM dbo.Cats;
Hãy xem kết quả.
SELECT * FROM #TempCatsAllData;
Kết quả:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Bạn cũng có thể lọc dữ liệu bằng WHERE
nếu bạn cần.
Ví dụ 2 - Tạo bảng không có dữ liệu
Dưới đây là ví dụ về cách tạo bảng mà không có dữ liệu.
USE Test; SELECT CatId, CatName, Phone INTO #TempCatsNoData FROM dbo.Cats WHERE 1 = 0;
Trong ví dụ này, tôi sử dụng WHERE 1 = 0
để trả về không có dữ liệu.
Ví dụ 3 - Kiểm tra các bảng
Trong ví dụ này, tôi so sánh hai bảng tạm thời với bảng gốc. Tôi thực hiện việc này bằng cách truy vấn sys.columns
chế độ xem danh mục trong cơ sở dữ liệu gốc (đối với bảng gốc) và trong tempdb cơ sở dữ liệu (cho các bảng tạm thời).
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%';
Kết quả:
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)