公司最近開發新系統,要把舊系統資料轉移到新系統,假設A表為新系統,欄位有料號、批號..,舊系統為B表,欄位有料號、批號.,但新系統資料表與舊系統資料表欄位不完全一樣
,請教一下要怎麼把新舊相同的欄位資料複製到 新系統A表,假設我想把B表料號、批號複製到A表該用什麼指令?
我使用以下指令:
UPDATE [_A131$]
SET [A_13102-料號]=(select 料號 from ['201911後$'] where ['201911後$'].料號=[_A131$].[A_13102-料號])
卻顯示:
訊息 512,層級 16,狀態 1,行 4
子查詢傳回不只 1 個值。這種狀況在子查詢之後有 =、!=、<、<=、>、>= 或是子查詢作為運算式使用時是不允許的。
陳述式已經結束。
請教各位功力深厚的大大們
1.用錯指令: 應該是要用
insert into tablea (料號,批號....)
select 料號,批號,....
from DATADBAE.DBO.tableb where 條件式
2.建議: 舊系統的資料要移到新系統時, 應該要有一些"過濾" :將不用的舊資料過濾掉.只將有用的資料放進新系統中. 最佳的過濾方式: 先將資料匯出成EXCEL檔. 經相關單位及人員檢視(將不要的資料刪除),調整(將錯誤及新增的欄位資料修正)後,再匯入 TABLE =>這是一般系統切換時的"必要過程".不然丟了一些永遠用不到的舊資料進新系統要幹嘛?
更新相同料號:使用 UPDATE FROM
UPDATE table_new
SET table_new.col1 = table_old.col1,
table_new.col2 = table_old.col2
FROM New_Table AS table_new
INNER JOIN Old_Table AS table_old
ON table_new.id = table_old.id
新增不存在的料號至新表:INSERT INTO SELECT
INSERT INTO New_Table (col1, col2)
SELECT col1,
col2
FROM Old_Table
WHERE NOT EXISTS (SELECT *
FROM New_Table
WHERE Old_Table.col1 = New_Table.col1)
專業的事 , 就該交給專業的人處理 .
"要把舊系統資料轉移到新系統" , 這是一件很浩大的工程 , 不是下了幾個 SQL 指令就可以解決的 , "至少" 要對以下 2 點很清楚才可以"評估"是不是可以直接轉(針對熟悉系統及 SQL 指令的人)
1.新舊系統的流程之差異
2.新舊系統的資料結構之差異
針對第 2 點而言 , 新系統有些欄位是必填(必須的) , 但是舊系統沒有那個值 (或是型態不一樣 , 長度不一樣....) 都會造成轉換的困難
要處理轉換的問題可能要連下好幾道 SQL 才可以解決 , 也可能是要將舊系統的資料轉到 Excel 想辦法(找 User 問)...補齊資料 , 再轉到新系統的資料結構
個人給您一個善意的建議 :
拒絕這個案子吧...
不然 , 資料沒轉好 , 新系統上不去 , 新系統上線一直有問題 ....
不是背黑鍋 , 就是....該找新工作了
1.應該是insert
insert into 新系統.db (料號,批號)
select 料號,批號 from 舊系統.db
2.在insert之前,應該先將料號基本資料建立完成
3.這是一個大工程,請先瞭解新舊系統的整個流程和架構,只有insert資料到DB,新系統不見得可以run
假如兩邊資料會存在需要 insert、update 和 delete 的情況,可以考慮用 Merge 來做,會比較方便
想問說你確定這樣轉完資料就都沒問題嗎?
後續user還要不要維護呢?(一定會有user要你幫他全部用匯的)
一般來說都是匯出資料到excel請user先確認與整理,針對新系統的架構調整資料
哪些要保留哪些不用匯刪掉,留下紀錄證據,某天也許會要回查就用得到
除非上頭就是跟你說全部先導過去,有問題各單位自己改