質問

レコードのグループに対して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)

コードを投稿する場合は、さらにサポートできる場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top