SheepDev

SQL與測試資料

從 CSV 或 JSON 範例產生 INSERT 陳述式

使用工具

準備幾筆測試資料也要花時間對齊欄順序和引用。JSON/CSV 轉 INSERT 能產生草稿,卻不知道資料表型別和限制。轉換工作應包含檢查 SQL 如何表示原資料,而非產生後就認為可直接執行。

用兩筆 JSON 看欄與值對應

表名 people、方言 PostgreSQL,輸入範例。id 是數字,code、name 是字串,note 第一筆 null、第二筆空字串。產生欄順序 id、code、name、note,各筆按鍵匹配,即使原鍵順序不同也按欄放置。

待轉換 JSON
[{"id":1,"code":"001","name":"O'Reilly","note":null},{"name":"Mina","id":2,"code":"010","note":""}]
產生值部分
(1, '001', 'O''Reilly', NULL),
(2, '010', 'Mina', '')

確認單引號加倍、001 保留零、NULL 與 '' 不同。JSON 中裸數字 001 本身無效,要保留前導零就應從來源宣告字串,比事後修輸出更可靠。

缺欄位不自動變 DEFAULT

工具彙整所有列出現的鍵,某筆缺欄位就輸出 NULL。刪第二筆 note 會從空字串變 NULL,並非 DEFAULT。省略欄與明確傳 NULL 可能因預設值和限制產生不同結果。

業務需要時應區分缺少、空字串、未知和零,如年齡零不等於未知,沒備註也可能不同於空備註。先做兩三筆代表例,再產生大批量,更容易發現語意誤讀。

CSV 數字在這裡保留為字串

CSV 中 id 的 1、2 也按字串讀取,不自動推數值型。這能保留前導零,但是否適合數值欄還取決目標庫轉換。CSV 寫 NULL 會是 'NULL' 字串,不等於 JSON null。

按字串讀取的 CSV
id,code,note
1,001,NULL
2,010,""

CSV 引號用於包含分隔符和換行,與 SQL 引號是不同層。可先用 CSV 檢查確認標題和含逗號欄位。若字元已因解碼錯誤損壞,產生 INSERT 無法恢復,應先檢查文字與欄。

巢狀與大整數需分別處理

JSON 數字保留精度,包括 18446744073709551615,但是否容納於目標型別是另一問題。巢狀物件陣列會拒絕,不會偷偷轉字串或拆關聯表,也不自動產生資料庫 JSON 欄運算式。

上限為 1000 筆、256 欄及 10000 儲存格,超出不能悄悄截掉列當完整結果。識別字字元也受限,不是任意結構複製工具,應先檢查目標型別、預設值與必填條件。

產生是草稿,執行是另一步

輸出不含連接,工具從不執行。別處執行前須檢查環境、現有紀錄、權限與限制。自動編號欄規則、主鍵重複、外鍵目標都不能從轉換成功得知,應遵循目標環境審核流程。

兩筆虛構資料能逐格對照,先檢查 NULL、空字串、引號與前導零,再增加數量。假資料產生可避免複製真實個人紀錄。產生越快,越應把時間留給執行前的含義審核。

將產生欄位與實際資料表定義核對

JSON 有 id、name、note 不代表資料表可原樣接受。自動 ID 可能限制明示值,NOT NULL 會拒絕 NULL,長度、外鍵、唯一約束也未檢查。不要為消錯全變字串,應核對來源語意與欄位型別。SQL 整齊不證明資料庫接受。

工具不決定重複執行結果:唯一鍵可能拒絕第二次,也可能新增重複列。未設計重試就反覆貼 SQL 不合適。交易、既有資料核對、衝突策略屬於執行設計。這是 INSERT 草稿,不是冪等匯入或遷移流程。

小範例加入引號、空字串、null、前導零,核對原值與 SQL 常值並解釋型別決定。兩三列比大量未審查匯出更易發現規則差異。需要執行測試時限於授權隔離資料,不對正式資料表試打。

參考資料

使用工具

指南 →