none
請問 delete 了與 where 中不同的資料, 要如何處理? RRS feed

  • 一般討論

  • 我用 MSDE 2000, WINDOWS XP SP3

    TABLEA 以 No 當 PK 降冪排列
    資料如下:

    Date           No.
    ------------  -------------
    2009/1/30  Q09013005   
    2009/1/30  Q09013004
    2009/1/30  Q09013003
    2009/1/30  Q09013002
    2009/1/30  Q09013001
    2009/1/28  Q09012802
    2009/1/28  Q09012801
    2009/1/15  Q09011506
    2009/1/15  Q09011505
    2009/1/15  Q09011504
    2009/1/15  Q09011503
    2009/1/15  Q09011502
    2009/1/15  Q09011501
    2009/1/10  Q09011001
    2009/1/08  Q09010802
    2009/1/08  Q09010801
    2009/1/05  Q09010501

    SELECT * FROM TABLEA WHERE NO <= 'Q09011599' 得到
    2009/1/15  Q09011506
    2009/1/15  Q09011505
    2009/1/15  Q09011504
    2009/1/15  Q09011503
    2009/1/15  Q09011502
    2009/1/15  Q09011501
    2009/1/10  Q09011001
    2009/1/08  Q09010802
    2009/1/08  Q09010801
    2009/1/05  Q09010501

    DELETE TABLEA WHERE NO <= 'Q09011599'  後
    SELECT * FROM TABLEA 卻是
    2009/1/15  Q09011506
    2009/1/15  Q09011505
    2009/1/15  Q09011504
    2009/1/15  Q09011503
    2009/1/15  Q09011502
    2009/1/15  Q09011501
    2009/1/10  Q09011001
    2009/1/08  Q09010802
    2009/1/08  Q09010801
    2009/1/05  Q09010501

    如果用 DELETE TABLEA WHERE NO IN (SELECT NO FROM TABLEA WHERE NO <= 'Q09011599') 就正常
    DELETE 刪除不該刪的資料, 請問要如何處理, 謝謝
    • 已變更類型 Alex ChuoModerator 2009年7月25日 上午 06:21 提問者不滿意其他人的解答
    2009年3月3日 上午 02:49

所有回覆

  • 你好
    或許你可以試下create 一個 temp table 用來store 你要delete 的資料
    e.g.

    create table #temp(
     d datetime,
    no varchar(10)
    )

    insert into #temp
    select date, no
    from tablea
    where [criteria 是你要delete 的資料]

    delete a
    from #temp t
    inner join tablea a
    on t.no = a.no

    drop tabl #temp
    這樣便可以delete 你要delete 不該刪的資料了
    便把

    insert into #temp
    select date, no
    from tablea
    where [criteria 是你不該delete 的資料]

    希望可以幫到你
    希望沒有誤解你的問題



    Chi
    2009年3月3日 上午 08:44
  • If you deleted wrong data already, can create a new database then restore backup of source database on it. You can copy deleted data from newly restored database.
    2009年3月3日 下午 02:43
  •  謝謝 ChiYan的答覆, 如果資料庫中的每一個資料表都有這種現象, 那麼資料庫的維護工作就變得很重了, 所以還是希望 delete 能正確刪除資料, 譬如改變設定...等等
    謝謝你
    2009年3月4日 上午 12:39
  • rmiao 表示:

    If you deleted wrong data already, can create a new database then restore backup of source database on it. You can copy deleted data from newly restored database.



    Thank you.
    2009年3月4日 上午 12:40