iT邦幫忙

0

關於MSSQL兩個資料庫如何合併?

  • 分享至 

  • xImage

我們公司有一個資料庫A
另外有一個外來的excel試算表B

假設我把excel的資料欄位名稱改成跟A一樣
我要如何依身份證號查詢A資料庫,倘若B資料庫=A資料庫的身份證相同
就把B資料庫那筆的值寫入A資料庫

反之倘若B資料庫的身份證號不等於A資料庫的身份證
就在A資料庫新增一筆資料,並把B資料庫該筆內容值寫入A資料庫

不知MS-SQL是否能作到?
或是ASP可以作到嗎?

看更多先前的討論...收起先前的討論...
假設原有 TABLE_A
身份證欄位為 ITID
1.將Excel匯入成 TABLE_B
2.刪掉 TABLE_A 中與 TABLE_B 身份證相同的資料
DELETE TABLE_A
FROM TABLE_A A
INNER JOIN
TABLE_B B ON B.ITID = A.ITID
3.將整個 TABLE_B 倒進 TABLE_A
SELECT * INTO TABLE_A FROM TABLE_B
4.刪掉 TABLE_B
DROP TABLE TABLE_B
wiseguy iT邦超人 1 級 ‧ 2013-01-10 08:24:42 檢舉
jawtair提到:
倘若B資料庫=A資料庫的身份證相同
就把B資料庫那筆的值寫入A資料庫

antijava 兄在第2步 delete 之前,要先把 B 這些記錄 update 到 A 去喔
jawtair提到:
倘若B資料庫=A資料庫的身份證相同
就把B資料庫那筆的值寫入A資料庫

哦..我的解讀是這樣的(有誤請指正)
若以B的角度來看
1.在A中已存在,則UPDATE
2.在A中不存在,則INSERT
而我的做法是想
用DELETE/DEFINE取代UPDATE的動作
先把「B已存在於A當中的資料」刪除
然後再一股腦兒
將全部B倒進A

報告完畢
收工放飯(好像太早了點疑惑)
ltc09 iT邦研究生 5 級 ‧ 2013-01-10 18:09:54 檢舉
是否考慮用VBA直接從EXCEL丟到SQL
wiseguy iT邦超人 1 級 ‧ 2013-01-10 18:14:06 檢舉
也行,不過發問者提到有《自動編號》的欄位,依 antijava 兄的做法會讓原有 A 的資料該欄位之值變掉了。
沒錯
因為我從不在乎什麼自動編號的欄位
哈哈
James iT邦大師 6 級 ‧ 2013-01-11 07:35:16 檢舉
這樣弄,會不會是A=B

2.主資料庫約15000筆, excel約1000多筆


假設1000多筆裡有300筆在15000筆中找得到,700筆找不到
答案的標準解法是
下300個UPDATE, 700個INSERT, 最後是15,700筆
而我的做法是
下300個DELETE, 1000個INSERT,最後也是15,700筆
如此而已
做菜

鐵殼心 iT邦高手 1 級 ‧ 2013-01-11 09:37:30 檢舉
antijava提到:
標準解法是
下300個UPDATE, 700個INSERT, 最後是15,700筆
而我的做法是
下300個DELETE, 1000個INSERT,最後也是15,700筆


砍掉重練的速度比較快!
tecksin提到:
砍掉重練


看到這四個字
我又想到另一種作法
1.把EXCEL倒進成為B
2.把全部的A倒進B去
300筆因為重覆而倒不進去
此時B有15,700筆
3.把A全部砍掉
4.把B全部倒進A(重練)
5.把B砍掉
噎到
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
sam0407
iT邦大師 1 級 ‧ 2013-01-10 08:31:56
最佳解答

要問一下樓主:
1.這個匯入資料作業是一次性需求?還是以後有可能變成定期日常作業?
2.資料庫資料筆數及Excel資料筆數各是多少?
3.使用者是否可接受資料庫暫時離線?
會問這些是因為需求不同,作法就不同,所花的成本也不同!

jawtair iT邦新手 5 級 ‧ 2013-01-10 09:41:19 檢舉

謝謝您的回覆,茲就問回覆如下:
1.不定期作業, 最少一年有一次
2.主資料庫約15000筆, excel約1000多筆
3.可接受暫時離線
附註:我不是寫程式的,管理屬於打雜的,會一點簡單的MS-SQL指令,現在公司有這樣的需求,要我想辦法解決,因為不止一種資料庫「會員名單、機構名錄(例似工商名錄)」,所以我需要徹底了解,才能依同樣的作法去弄另一個資料匯整。

sam0407 iT邦大師 1 級 ‧ 2013-01-11 08:39:39 檢舉

如果我是樓主,我會這樣作:
1.請程式設計師或自己試著寫一隻資料匯入程式
2.匯入程式需能自定義Excel欄位與資料庫欄位Mapping
3.匯入前先讓使用者預覽要匯入的資料
4.匯入後要讓使用者檢視每一筆資料是否成功匯入,若失敗需顯示錯誤訊息
3.製作詳細操作步驟的使用手冊
4.交付使用者,以後讓使用者自己作匯入動作

樓上deanya大建議用DTS的確是一個好作法,拿到一個新的檔案到匯入完成應該大約30分鐘就完成(包含改欄位名稱,資料調整),但我認為既然是重覆性工作,就應該讓使用者在不須IT介入下就可以完成,不然事情愈壓愈多,怎麼作的完。當然您也可以將DTS的操作步驟作成手冊教使用者操作,但DTS匯入失敗的說明實在不夠清楚,到最後使用者還是會找您幫忙處理!

jawtair iT邦新手 5 級 ‧ 2013-01-11 18:22:24 檢舉

一般這樣的程式不知報價會是多少錢?

18
wiseguy
iT邦超人 1 級 ‧ 2013-01-09 22:13:46

最土法煉鋼的方式:

  1. 把 Excel 另存成純文字檔。
  2. 開一個具有《直行編輯》功能的文字編輯器,如 Ultraedit。
  3. 開啟那個純文字檔,用直行編輯把欄位修改成 update 語法的 SQL。因為用直行編輯,所以不管資料有幾行,只需打一次 SQL 即可。不過欄位有可能要搬移一下。如圖所示。
  4. 存檔之後,在 MSSQL 匯入執行這個 SQL 檔就好了。

看更多先前的回應...收起先前的回應...
jawtair iT邦新手 5 級 ‧ 2013-01-09 22:33:42 檢舉

謝謝您的回覆, 但還是不了解您的意思,我再說一下好了

  1. B資料庫不止一個欄位, 是有很多欄位寫入不同的值, 例如:編號(自動編號), 姓名, 電話, 郵遞區號, 縣市(城市), 地址...等等。
  2. 如何一個指令, 讓它一口氣自動搜尋一樣身份證號的B資料庫各值寫入A資料庫;A資料庫搜尋不到的,自動新增一筆, 並將B資料庫值寫入
Albert iT邦高手 1 級 ‧ 2013-01-09 22:39:02 檢舉

jawtair提到:
自動新增一筆, 並將B資料庫值寫入

小朋友出大題目
大朋友出小題目

這是 ...
INSERT INTO B_Table
SELECT * FROM A_Table

jawtair iT邦新手 5 級 ‧ 2013-01-09 22:52:51 檢舉

好像有一點亮光, 是否
INSERT INTO B_Table
SELECT * FROM A_Table
下面要加 WHERE

wiseguy iT邦超人 1 級 ‧ 2013-01-09 23:26:24 檢舉
  1. 我當然知道很多欄位,我以為我寫三個當示範,你就應該看得懂。
  2. 一個指令比較貪心啦,至少要兩個指令:一個我已經寫了,一個二樓的阿伯大已經寫了。
jawtair iT邦新手 5 級 ‧ 2013-01-09 23:43:58 檢舉

這樣說好了, 如果我把EXCEL檔匯入MSSQL成為另一個資料庫後
會不會比較好做? 有沒有範例可供參考?

繼然用 MS SQL~
為什麼不用 DTS ?! 卻要花時間要寫 INSERT INTO?!

jawtair iT邦新手 5 級 ‧ 2013-01-11 00:53:03 檢舉

謝謝大家,也謝謝deanya講到DTS
我正在研究Data Transformation Services有關的資訊,希望真能解決遇到的問題。

8

我寫了一篇 如何在 SQL Server 內針對 Excel 做查詢
可以參考一下~ XD
http://www.dotblogs.com.tw/dean/archive/2013/01/11/87154.aspx

我要發表回答

立即登入回答