iT邦幫忙

0

MSSQL CSV大量UPDATE

  • 分享至 

  • xImage

小弟愚笨
不小心將測試資料的所有姓名(CName)都改掉了
還好有備份CSV檔案

不過CSV檔只有兩個欄位
CName,dataid

剛好可以使用dataid當作where條件

請問如何用此csv檔大量update?

本來想直接用匯入insert的方式
不過其他欄位資料有,符號
會誤判不同欄位資料 因而資料跑掉

故求問是否有CSV大量UPDATE的方式
使用SQL為 MSSQL2014

slime iT邦大師 1 級 ‧ 2019-10-05 16:31:06 檢舉
1. 將csv插入暫存表
2. 比對暫存表與目前表, 產生應更新清單.
3. 備份目前表.
4. 依照應更新清單執行更新.
5. 比對目前表與備份, 確認與應更新清單相符.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
player
iT邦大師 1 級 ‧ 2019-10-05 17:52:20
最佳解答

你電腦裡有裝Excel嗎?
如果有的話
用Excel開啟csv檔後
手動建立一份SQL的update的命令字串
像是C1
="UPDATE [資料表名稱] SET CName = '" & A1 &"' where dataid = '" & B1 & "';"

然後用複製貼上的方式去產生C2以後的所有的update命令
然後再貼到SQL Server去跑一次就好了

0
juju
iT邦新手 5 級 ‧ 2019-10-05 16:48:18

第一個想法是 BULK INSERT

也看過同事用excel讀檔後,函式
="SELECT '"&A1&"' AS CName, '"&B1&"' AS dataid UNION ALL"
再貼回SSMS INSERT到TEMP TABLE去UPDATE資料

0
fuzzylee1688
iT邦研究生 3 級 ‧ 2019-10-05 16:55:43

建議用 BCP api匯入後, 以SELECT INTO 到WORKING TABLE, 再RENAME, 有備份又快速.

2
一級屠豬士
iT邦大師 1 級 ‧ 2019-10-05 18:18:45

不管怎樣,先把這個檔案,再多備份幾個,取不同名字,並且要放到其他地方.

0
chang137
iT邦新手 5 級 ‧ 2020-12-22 09:43:22

平常在用的程式段 供作參考 要先select需要update的資料
public static void UpdateByCmdBuilder(SqlDataAdapter adapter, DataTable olddt, bool doInsert, bool doUpdate, bool doDelete)
{
SqlCommandBuilder b = new SqlCommandBuilder(adapter);
if (doInsert)
adapter.InsertCommand = b.GetInsertCommand();
if (doUpdate)
adapter.UpdateCommand = b.GetUpdateCommand();
if (doDelete)
adapter.DeleteCommand = b.GetDeleteCommand();
adapter.Update(olddt);
}

我要發表回答

立即登入回答