質問
レコードのグループに対してUPDATEコマンドを実行したいのですが、更新後の一部のレコードがテーブル制約に違反するため、失敗します。何らかの形で適切なレコードのみを更新することは可能ですか?
解決
すべてまたは何もない更新の動作は仕様です
更新コマンドにWhere句を追加してすべての制約をチェックできますが、これはコードの重複を招き、良いことではありません
カーソルまたはCLRループを使用して、一度に1行ずつ更新する方法はどうですか?
これがマルチレイヤーアプリケーションの一部である場合、これは、データベースにヒットする前にデータ検証を行うことができるように、ビジネスオブジェクトがメタデータまたはスキーマの問い合わせを通じてSQL制約について知る必要がある場所です
CSLAフレームワークには、いくつかの利点があります
他のヒント
更新ステートメント自体はアトミックであり、すべて成功するか、すべて失敗します。制約に違反しない行のみを更新するようにSQLを変更する必要があります。
WHERE句に制約を追加する必要があります。
それとも、各行ごとに個別に更新を実行しますが、これはまったく良い考えではないようです。
すでに投稿されている回答の一部に追加するには、where句でサブクエリを使用する必要がある場合があります。 Like(擬似コード内)
update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)
コードを投稿する場合は、さらにサポートできる場合があります。
所属していません StackOverflow