跳至內容
Astera Technology

拷貝資料表為何把名稱放進數量欄?

來源與目標欄位排列不同,寫入時要明列目標欄名。

下載完整個案資料及參考答案 ↓

先核來源與已訂規則

本例來源依次為名稱、整數數量;目標卻為數量、名稱及預設標記。按位置拷貝,A 會入數量、2 入名稱。更正明列 name,count,標記沿已訂預設。

已填假設輸入
紀錄輸入 JSON
原例輸入{"name":"A","count":2}
下載可編輯 CSV ↓

比較兩條實際路徑

非嚴格類型目標兩路都可能完成,沒錯誤並不足夠。須查真正目標值,更正應 count2、nameA、tag new。

錯誤與更正路徑的輸出
路徑輸出 JSON
錯誤路徑[{"count":"A","name":"2","tag":"new"}]
更正路徑[{"count":2,"name":"A","tag":"new"}]
下載可編輯 CSV ↓
本地 Node.js 程序:22.23.3 或 24.14.1
import {DatabaseSync} from 'node:sqlite';
import {TextDecoder} from 'node:util';
import {inflateSync} from 'node:zlib';
import {posix} from 'node:path';
import {createHash} from 'node:crypto';
const rows=(db,sql)=>db.prepare(sql).all().map(r=>({...r}));
const failed=(action)=>{try{action();return null;}catch(e){return {code:e.errcode??e.code??e.name};}};

import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
    const db=new DatabaseSync(':memory:');try{db.exec("CREATE TABLE source(name TEXT,count INTEGER);CREATE TABLE target(count INTEGER,name TEXT,tag TEXT DEFAULT 'new');");
      db.prepare('INSERT INTO source VALUES(?,?)').run(i.name,i.count);
      if(corrected)db.exec('INSERT INTO target(name,count) SELECT name,count FROM source');
      else db.exec("INSERT INTO target SELECT name,count,'new' FROM source");
      return rows(db,'SELECT * FROM target');
    }finally{db.close();}
  };
const cases=[{"label":"misleading base","input":{"name":"A","count":2},"expected":[{"count":"A","name":"2","tag":"new"}],"corrected":false},{"label":"corrected base","input":{"name":"A","count":2},"expected":[{"count":2,"name":"A","tag":"new"}],"corrected":true},{"label":"zero quantity remains zero","input":{"name":"A","count":0},"expected":[{"count":0,"name":"A","tag":"new"}],"corrected":true},{"label":"empty permitted display name","input":{"name":"","count":2},"expected":[{"count":2,"name":"","tag":"new"}],"corrected":true}];
for(const test of cases){
  const actual=run(test.input,test.corrected);
  assert.deepEqual(actual,test.expected,test.label);
  console.log(test.label,actual);
}
下載可執行例子 ↓

下次載入前核邊界

零數量及本例容許的空顯示名稱,都保回正確欄和值。

可編輯邊界紀錄及預期輸出
情況輸入 JSON預期輸出 JSON
已記零數量{"name":"A","count":0}[{"count":0,"name":"A","tag":"new"}]
容許的空顯示名稱{"name":"","count":2}[{"count":2,"name":"","tag":"new"}]
下載可編輯 CSV ↓

按位置插入成功,是否已證明欄位對得正確?

查看參考答案

不是,錯行是 countA、name2。須列目標欄名,正確應 count2、nameA。

相關資源

系統整合服務 →