DELETE FROM TestTable WHERE ID IN (1, 3, 54, 68)
優於:迴圈多次 DELETE、多條 DELETE 用分號合併。適用於前端勾選不連續 ID 批量刪除。
INSERT INTO TestTable SELECT 1, 'abc' UNION ALL SELECT 2, 'bcd' UNION ALL SELECT 3, 'cde'
INSERT INTO TestTable SELECT 1, 'abc' FROM dual UNION ALL SELECT 2, 'bcd' FROM dual UNION ALL SELECT 3, 'cde' FROM dual
實測:1000 筆資料比迴圈 INSERT 快 20 倍以上(除錯模式下)。
⚠️ 安全警示:僅適用於可信資料來源(內部工具、可靠檔案、專用終端),嚴防 SQL 注入。
SQL 陳述式長度有上限(SQL Server 65536 * 網路封包大小)。建議:
| 場景 | 是否適用 | 備註 |
|---|---|---|
| 內部 WinForm 匯入 Excel 手機號碼 | ✅ 完美 | 資料可信、量大但不巨大 |
| GPRS 專用終端上傳資料 | ✅ 適用 | 來源可靠、批次處理 |
| 公開網頁表單提交 | ❌ 禁用 | 必須參數化防注入 |
| 主鍵為業務自然鍵 | ❌ 不適用 | 需改用 MERGE 或分批 INSERT |
將常用高效模式收錄進專案開發規範;零碎技巧至少記錄在筆記本,避免「下次再遇到才想起」。