2009-03-05 49 views
2

我想對一組記錄執行UPDATE命令,但它失敗,因爲更新後的某些記錄會違反表約束。是否有可能以某種方式更新合適的記錄?部分UPDATE命令

回答

5

行爲作爲全有或全無是由設計

您可以添加Where子句您更新命令檢查所有的約束,但這會導致代碼重複,不是一件好事

如何做使用Cursor或CLR循環一次更新一行?

如果這是一個多層應用程序的一部分,那麼這是你的業務對象需要知道通過元數據或模式審訊你的SQL約束,使數據驗證可以做它擊中數據庫之前

CSLA framework對此有一些好處

5

更新語句本身是原子的,它會全部成功或全部失敗。您需要修改SQL以僅更新約束不會被違反的行。

3

您需要將約束添加到WHERE子句。

無論是爲每一行分別運行更新,但這似乎不是一個好主意。更新的

0

若要添加一些已發佈的答案:您可能需要在where子句中使用子查詢。喜歡(在僞代碼中)

update mytable 
set myfield = myval 
where not exists (select from some table that would tell you if a constraint is violated for this row) 

如果您發佈代碼,我可能會幫助您更多。