看板 Database 關於我們 聯絡資訊
資料庫名稱:MS SQL Server 資料庫版本:2008 內容/問題描述: 資料庫內有兩張結構相近的表,而我要把資料從A表轉到B表 A跟B表都有同樣的UNIQUE Key:ID,型態是char(8)只存英數 因為中間操作很多,所以有使用交易避免只改一半的情況 然後B表的現存資料。全部都要刪掉Delete以後才新增Insert進去 大概就像這樣: begin tran Delete From B Insert Into B (ID, Column1, Column2,...) Select ID, Column1, Column2,... From A Where Not Exists(Select 1 From B Where ID = A.ID) commit 語法中where的部分是避免寫入重複資料,這段語法也會用在純粹新增時(不先刪除) 可是 在執行時就會產生錯誤說我違反條件約束插入同樣的ID 但是我不是已經先全刪了嗎... 如果是不刪除的話,這段語法反而不會失敗 看起來像是因為交易中的暫時狀態讓該ID還佔著在B裡面的位置 所以才會認為該資料仍然存在? 請問有什麼方法在依循目前流程的情況下成功插入資料呢? 謝謝各位 ============= 剛發完就自己找到類似的問題 http://tinyurl.com/jc3luox 好像是不行的樣子... 執意要做的話就只能取消條件約束了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.18.8 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1456816355.A.7F3.html ※ 編輯: Peruheru (220.134.18.8), 03/01/2016 15:32:57
rockchangnew: http://goo.gl/gq3QAc 03/01 21:21
futureisours: delete還沒commit,資料表還有相同資料當然不能inser 03/01 22:01
likesp999: 是不是前面刪除還沒commit,導致後來insert的key重複 03/01 22:03
SeanBoog: 建議你先把B複製成C 然後再分段commit試試 03/03 00:36
streetbad: 或者建一個temp table 把新的B的內容都塞進去 03/03 02:11
streetbad: 然後再commit delete與倒回去 03/03 02:11