先訂清楚要判斷甚麼,再準備資料
電郵只有空格也屬漏填,先整理空格,再把空字串視為缺漏。金額則用空值判斷;零已經是輸入值,是否可接受由業務規則決定。逐欄列出缺漏,覆核同事便可一次改齊,不必只看到一個「失敗」標記。
以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。
| 編號 | 外部編號 | 原電郵 | 金額(分) | 業務日期 |
|---|---|---|---|---|
| 1 | X1 | a@example.test | 10000 | 2026-10-01 |
| 2 | X2 | [1 個空格] | 20000 | 03/04/2026 |
| 3 | X3 | NULL(未知或沒有資料) | NULL(未知或沒有資料) | NULL(未知或沒有資料) |
| 4 | X4 | d@example.test | 0 | 2026-02-30 |
CREATE TABLE import_rows(id INTEGER PRIMARY KEY, external_id TEXT, email TEXT, amount_cents INTEGER, business_date TEXT);
CREATE TABLE sync_attempts(id INTEGER PRIMARY KEY, external_id TEXT, outcome TEXT);
CREATE TABLE target_records(id TEXT PRIMARY KEY, external_id TEXT UNIQUE);
INSERT INTO import_rows VALUES (1,'X1','a@example.test',10000,'2026-10-01'),(2,'X2',' ',20000,'03/04/2026'),(3,'X3',NULL,NULL,NULL),(4,'X4','d@example.test',0,'2026-02-30');
INSERT INTO sync_attempts VALUES (1,'X1','success'),(2,'X2','success'),(3,'X3','failed');
INSERT INTO target_records VALUES ('T1','X1');執行查詢,核對實際結果
SELECT id,
CASE WHEN NULLIF(TRIM(email),'') IS NULL THEN 1 ELSE 0 END AS missing_email,
CASE WHEN amount_cents IS NULL THEN 1 ELSE 0 END AS missing_amount
FROM import_rows WHERE NULLIF(TRIM(email),'') IS NULL OR amount_cents IS NULL
ORDER BY id;| 編號 | 電郵漏填(1=是) | 金額漏填(1=是) |
|---|---|---|
| 2 | 1 | 0 |
| 3 | 1 | 1 |
第 2 筆只欠電郵;第 3 筆同時欠電郵及金額。第 4 筆有填零金額,通過「有沒有填」的檢查,但日期仍有問題。必填欄位齊全,不等於整筆資料可以直接匯入。
按資料範圍使用結果
這是完整性檢查,未驗證電郵能否送達,也不是會計規則。欄位型別、數值範圍及對照須另訂。未通過的資料留在更正檔,保留原外部編號供重做匯入。
本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。