Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo một bảng tạm thời dựa trên một bảng khác trong SQL Server

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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn về Cơ sở dữ liệu Thư

  2. Hoàn nguyên giao dịch Entity Framework 6

  3. Làm thế nào để chạy cùng một truy vấn trên tất cả các cơ sở dữ liệu trên một phiên bản?

  4. Làm cách nào để kiểm tra xem IDENTITY_INSERT được đặt thành BẬT hay TẮT trong SQL Server?

  5. Giá trị ngẫu nhiên cho cột DATETIME