首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# SQL INSERT UNION 執行失敗:語法錯誤與例外處理

     編輯:程式設計綜合問答

錯誤 SQL

string sql = "insert into Phone3 (select * from Phone1 union select * from Phone2)";

問題

  1. 多餘括號:SQL Server INSERT ... SELECT **不需要**將 SELECT 用括號包裹。
  2. 欄位順序/數量不匹配:* 依賴表定義順序,三表結構必須**完全一致**(欄位數、型別、順序),否則報錯或資料錯位。
  3. 未捕獲 SqlException:ExecuteNonQuery() 拋出例外,未 try-catch 導致執行緒退出代碼 259 (0x103 = 尚未處理的例外)。

修正代碼

string sql = "INSERT INTO Phone3 (Col1, Col2, Col3) " +  // 明確列出目標欄位
             "SELECT Col1, Col2, Col3 FROM Phone1 " +
             "UNION " +  -- UNION ALL 保留重複,UNION 去重
             "SELECT Col1, Col2, Col3 FROM Phone2";

using (SqlConnection con = new SqlConnection(strConn))
using (SqlCommand cmd = new SqlCommand(sql, con)) {
    try {
        con.Open();
        int rows = cmd.ExecuteNonQuery();
        MessageBox.Show(rows > 0 ? $"成功插入 {rows} 筆" : "無資料插入");
    } catch (SqlException ex) {
        MessageBox.Show("SQL 錯誤: " + ex.Message);
    }
}

最佳實踐

  • **永遠明確列出欄位**,避免 * 導致結構變更時靜默錯誤。
  • using 確保連線/命令釋放。
  • try-catch SqlException 給使用者友善提示並記錄日誌。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved