看板 C_Sharp 關於我們 聯絡資訊
有一個資料庫定時會將資料拋出至某個TableA(因為此資料庫一般使用者無法存取) 拋出的時間尚在跟使用者確認(Maybe 1 小時一次) 如今,有個TableB會將TableA的部分欄位資料取回(可能會follow上述拋出的時間) 假設Table有A,B,C,D,E,F,G欄位(A為主鍵),由TableA取回的僅有A,B,C欄位 TableB的G欄位,會透過一個TXT文字檔塞入 文字檔格式 apple01 <--A主鍵 apple08 <--A主鍵 F08 <--G欄位 banana07 <--A主鍵 pc951dx <--A主鍵 C05   <--G欄位 以上述為例, TableB如果有前兩行A主鍵的話,G欄位則為F08 TableB如果有第3.4行A主鍵,則G欄位為C05 因為TableA有可能會比文字檔先進TableB,文字檔也有機會比TableA先進TableB 那是不是只能在塞入每筆資料前,先對DB做Select在做insert或update? 問題一:如果文字檔的每個G欄位前面有30~50個A欄位,不就要做30~50次SELECT ? 目前的作法是,將讀到的每一行塞入List<>,且當我讀到G欄位時, 使用SELECT * from Table where A IN('','')去判斷Table是否有資料, 假設List有5筆,select回傳DataTable為0筆(代表TableB無資料), 則使用Insert塞入TableB 問題二:如果select後回傳只有3筆,實際List有5筆(代表有2筆TableB無資料), 那麼我要怎麼去抓出是哪2筆在TableB無資料?使用List<>和DataTable比較? 那我該轉成相同的容器再使用foreach比較嗎?還是...? 還是有比較好的處理方式? 因為總覺得都一直在QueryDB,希望可以減少QueryDB的次數 麻煩各位前輩指點,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.151.87 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1396882312.A.14E.html
qwer820404:寫成store procedure 把你的資料邏輯寫在裡面... 04/07 23:29
qwer820404:定義結果集 例如 回傳1 就是 XX 2就是XXX 以此類推 04/07 23:31
qwer820404:程式在呼叫的時候就是把呼叫SP的結果依結果集去處理 04/07 23:31
qwer820404:程式裡可以用enum的方式去做 04/07 23:32
qwer820404:資料庫的話 就寫個簡單的文件紀錄一下 或者要記在table 04/07 23:32
qwer820404:也可以 避免到時候忘記結果的意義是什麼 04/07 23:33
drizzt123:老實說有點看不太懂,否可用merge(DB or table)處理? 04/09 00:31