需求:將 Phone1、Phone2 兩表資料合併(去重)寫入 Phone3。前提是三表結構完全一致(欄位名、型別、順序)。
INSERT INTO Phone3
SELECT * FROM Phone1
UNION
SELECT * FROM Phone2;
UNION 會自動去除重複列;若需保留重複請用 UNION ALL。
using System;
using System.Data.SqlClient;
public class DataMerger
{
public void MergePhones()
{
string connStr = "Server=.;Database=TestDB;Integrated Security=True;";
string sql = @"
INSERT INTO Phone3 (Col1, Col2, Col3) -- 建議明確列出欄位
SELECT Col1, Col2, Col3 FROM Phone1
UNION
SELECT Col1, Col2, Col3 FROM Phone2;";
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
int rows = cmd.ExecuteNonQuery();
Console.WriteLine($"成功合併 {rows} 筆資料。");
}
}
}
SELECT * 導致結構變更時出錯。SqlTransaction 中,確保原子性。SqlBulkCopy。Phone3 於匯入前暫停非叢集索引,匯入後重建,大幅提升速度。