首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 資料表追加資料:INSERT INTO SELECT 實作範例

     編輯:關於SqlServer

情境

將來源資料表的資料追加至結構相同的目標資料表。

建立測試資料表與資料


-- 來源資料表
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)。
  • 觸發器會對每筆插入觸發,大量資料考慮停用觸發器或分批處理。
  • 外鍵約束會驗證參考完整性,確保目標表相關主鍵存在。
  • 交易日誌增長:大量追加建議簡單復原模式或分批提交控制日誌大小。

效能提示

  • 來源表有索引支援 WHERE 條件可大幅加速。
  • 目標表索引過多會拖慢插入,考慮匯入前停用非叢集索引,匯入後重建。
  • 使用 BULK INSERT 或 bcp 從檔案匯入比跨表 SELECT 更快。

INSERT INTO ... SELECT ... 是資料表間追加資料最標準、可移植的 SQL 模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved