將來源資料表的資料追加至結構相同的目標資料表。
-- 來源資料表
CREATE TABLE tablea (
col1 VARCHAR(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
col2 VARCHAR(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
);
GO
INSERT INTO tablea (col1, col2) VALUES ('1111', '1111');
INSERT INTO tablea (col1, col2) VALUES ('2222', '2222');
GO
-- 目標資料表(結構相同)
CREATE TABLE tableb (
col1 VARCHAR(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
col2 VARCHAR(50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
);
GO
INSERT INTO tableb (col1, col2) VALUES ('11112', '11131');
INSERT INTO tableb (col1, col2) VALUES ('22223', '22322');
GO
-- 將 tableb 的資料追加至 tablea
INSERT INTO tablea (col1, col2)
SELECT col1, col2 FROM tableb;
GO
SELECT * FROM tablea;
-- 預期結果:4 筆資料(原 2 筆 + 追加 2 筆)
| 需求 | 語法 |
|---|---|
| 指定欄位順序不同 | INSERT INTO tablea (col2, col1) SELECT col1, col2 FROM tableb;(欄位一一對應) |
| 只追加特定條件資料 | INSERT INTO tablea (col1, col2) SELECT col1, col2 FROM tableb WHERE col1 LIKE '1%'; |
| 追加時轉換資料 | INSERT INTO tablea (col1, col2) SELECT UPPER(col1), col2 + '_suffix' FROM tableb; |
| 避免重複(假設 col1 唯一) | INSERT INTO tablea (col1, col2) SELECT b.col1, b.col2 FROM tableb b LEFT JOIN tablea a ON b.col1 = a.col1 WHERE a.col1 IS NULL; |
| 大量資料高效追加 | INSERT INTO tablea WITH (TABLOCK) (col1, col2) SELECT col1, col2 FROM tableb;(最小化記錄、鎖定整張表) |
IDENTITY 欄位不可直接插入指定值(除非 SET IDENTITY_INSERT tablea ON)。BULK INSERT 或 bcp 從檔案匯入比跨表 SELECT 更快。INSERT INTO ... SELECT ... 是資料表間追加資料最標準、可移植的 SQL 模式。