在開發測試階段,常需將資料從一個資料表複製到另一個資料表。T-SQL 提供兩種核心語法,適用場景截然不同:
INSERT INTO Table2 (col1, col2, ...)
SELECT col1, col2, ... FROM Table1;
Table2 必須預先建立-- 建立測試表
CREATE TABLE Table1 (a VARCHAR(10), b VARCHAR(10), c VARCHAR(10), PRIMARY KEY (a));
CREATE TABLE Table2 (a VARCHAR(10), c VARCHAR(10), d INT, PRIMARY KEY (a));
-- 插入測試資料
INSERT INTO Table1 VALUES ('趙','asds','90'), ('錢','asds','100'), ('孫','asds','80'), ('李','asds',NULL);
-- 複製並帶入常數 5
INSERT INTO Table2 (a, c, d) SELECT a, c, 5 FROM Table1;
-- 驗證結果
SELECT * FROM Table2;
SELECT col1, col2, ... INTO Table2 FROM Table1;
Table2 必須不存在,語句執行時自動建立結構並複製資料-- 建立來源表與資料(同上)
-- 自動建立 Table2 並複製 a、c 兩欄
SELECT a, c INTO Table2 FROM Table1;
-- 驗證
SELECT * FROM Table2;
| 需求 | 推薦語法 |
|---|---|
| 目標表已存在、需保留索引/主鍵 | INSERT INTO SELECT |
| 需插入常數或衍生欄位 | INSERT INTO SELECT |
| 快速建立備份表、結構與資料一次完成 | SELECT INTO |
| 臨時分析、一次性查詢結果落地 | SELECT INTO |