iT邦幫忙

1

把MSSQL A表欄位複製到B表欄位

  • 分享至 

  • xImage

公司最近開發新系統,要把舊系統資料轉移到新系統,假設A表為新系統,欄位有料號、批號..,舊系統為B表,欄位有料號、批號.,但新系統資料表與舊系統資料表欄位不完全一樣
,請教一下要怎麼把新舊相同的欄位資料複製到 新系統A表,假設我想把B表料號、批號複製到A表該用什麼指令?

我使用以下指令:
UPDATE [_A131$]
SET [A_13102-料號]=(select 料號 from ['201911後$'] where ['201911後$'].料號=[_A131$].[A_13102-料號])
卻顯示:
訊息 512,層級 16,狀態 1,行 4
子查詢傳回不只 1 個值。這種狀況在子查詢之後有 =、!=、<、<=、>、>= 或是子查詢作為運算式使用時是不允許的。
陳述式已經結束。

請教各位功力深厚的大大們

你確定要用 update ? 資訊太少,不宜隨便動手,最好先備份.
另外開別的database,做測試.
感謝大大建議
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
做工仔人!
iT邦大師 1 級 ‧ 2020-07-06 16:59:13
最佳解答

1.用錯指令: 應該是要用
insert into tablea (料號,批號....)
select 料號,批號,....
from DATADBAE.DBO.tableb where 條件式
2.建議: 舊系統的資料要移到新系統時, 應該要有一些"過濾" :將不用的舊資料過濾掉.只將有用的資料放進新系統中. 最佳的過濾方式: 先將資料匯出成EXCEL檔. 經相關單位及人員檢視(將不要的資料刪除),調整(將錯誤及新增的欄位資料修正)後,再匯入 TABLE =>這是一般系統切換時的"必要過程".不然丟了一些永遠用不到的舊資料進新系統要幹嘛?

看更多先前的回應...收起先前的回應...
BKY iT邦好手 1 級 ‧ 2020-07-06 17:25:55 檢舉

注意一下A,B表料號,批號欄位長度
A表欄位長度要大於或等於B表
不然B表資料長度過長有可能inset到A表時會被截斷

BKY 大大謝謝提醒

請教做工大大,
1.那新系統有欄位舊系統沒有該來位怎麼辦,例如自動編號的ID
2.資料欄位類型不一致時怎麼轉,還是那叫系統商重建資料表比較快?

這二個問題比較好的解決方式:
就是將舊系統的資料先匯出為EXCEL檔(DTS中有匯出的功能) =>在資料庫名稱處按右鍵=>選"工作"=>匯出資料.
在EXCEL檔中維護好相關資料,不管是自動編碼的ID或是資料類型,長度...均在EXCEL中調整好後. 再用DTS中的"匯入資料",將資料匯入新系統的TABLE中.

注意事項:若自動編號ID是選用系統自動產生時,EXCEL中可以不用維護(但是 ERP中的編號不太建議用系統自動號)

1
通靈亡
iT邦高手 1 級 ‧ 2020-07-06 16:28:24

更新相同料號:使用 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)

謝大大,我在試試看

1
rogeryao
iT邦超人 7 級 ‧ 2020-07-06 22:39:32
專業的事 , 就該交給專業的人處理 .

"要把舊系統資料轉移到新系統" , 這是一件很浩大的工程 , 不是下了幾個 SQL 指令就可以解決的 , "至少" 要對以下 2 點很清楚才可以"評估"是不是可以直接轉(針對熟悉系統及 SQL 指令的人)
1.新舊系統的流程之差異
2.新舊系統的資料結構之差異
針對第 2 點而言 , 新系統有些欄位是必填(必須的) , 但是舊系統沒有那個值 (或是型態不一樣 , 長度不一樣....) 都會造成轉換的困難
要處理轉換的問題可能要連下好幾道 SQL 才可以解決 , 也可能是要將舊系統的資料轉到 Excel 想辦法(找 User 問)...補齊資料 , 再轉到新系統的資料結構

個人給您一個善意的建議 :
拒絕這個案子吧...
不然 , 資料沒轉好 , 新系統上不去 , 新系統上線一直有問題 ....
不是背黑鍋 , 就是....該找新工作了

確實.其實資料移轉是有專門的工具及職務的.這是一門很高深的學問.
看標註是 ms sql, 應該是使用 SQL Server. 建議可以先多備份,複製好幾份資料庫.SQL Server 有一個 DTS (資料轉移服務, Data Transformation Services). 可以先研究看看.先操作熟練吧.

謝一級屠豬士大大,我再試試看,我目前用自己PC見資料庫來試

rogeryao大大,
欄位不一致真的很困擾,那可以把新舊都匯到EXCEL,把符合的資料貼到新資料表上再匯入?

1
allenlwh
iT邦高手 1 級 ‧ 2020-07-07 08:53:22

1.應該是insert

insert into 新系統.db (料號,批號)
    select 料號,批號 from 舊系統.db

2.在insert之前,應該先將料號基本資料建立完成
3.這是一個大工程,請先瞭解新舊系統的整個流程和架構,只有insert資料到DB,新系統不見得可以run

謝大大提醒,我再試試看

1
pilipala
iT邦研究生 5 級 ‧ 2020-07-07 09:00:20

假如兩邊資料會存在需要 insert、update 和 delete 的情況,可以考慮用 Merge 來做,會比較方便

Merge

謝謝大大指教,我再試試,第一次聽到這個指令

0
GJ
iT邦好手 1 級 ‧ 2020-07-07 11:41:35

想問說你確定這樣轉完資料就都沒問題嗎?

後續user還要不要維護呢?(一定會有user要你幫他全部用匯的)

一般來說都是匯出資料到excel請user先確認與整理,針對新系統的架構調整資料

哪些要保留哪些不用匯刪掉,留下紀錄證據,某天也許會要回查就用得到

除非上頭就是跟你說全部先導過去,有問題各單位自己改

應該會花錢找廠商協助,後來發現系統商資料表都用代號方式呈現
不知道對應資料表是哪個了....

我要發表回答

立即登入回答