ストアド プロシージャ (SQL サーバー 2008r2) を作成したいのですが、テーブルがあるとします。
人 列: ID int (pk) Date_of_birth 日付が null ではない Phone int allow null Address int null を許可 名前 nvarchat(50) が null ではない
サンプルデータ:
Id=1,Date_of_birth=01/01/1987,phone=88888888,address=null,name='Steve'
ストアド プロシージャ内のステートメントを更新します。パラメーターは既に宣言されていると仮定します。
Update person set
Date_of_birth=@dob,phone=@phone,address=@address,name=@name where id=@id
テーブルには、変更をログに記録するトリガーがあります。上記の person テーブルを更新するための asp.net 更新ページができました。
問題は、ユーザーが address='apple street' を更新したいだけの場合、上記の update ステートメントはすべてのフィールドを更新しますが、元の値 = 新しい値かどうかをチェックせず、このフィールドを無視して次のフィールドをチェックします。したがって、列が更新されない場合でも、ログ テーブルにすべてのイベントが記録されます。
この時点で、私の解決策
- ID ですべての値を選択し、それらをローカル変数に格納します。if-else チェックを使用して更新ステートメントを生成します。最後に、生成された SQL (sp_executesql) を動的に実行します。
- ID ですべての値を選択し、それらをローカル変数に格納します。if-else チェックを使用して、各フィールドを個別に更新します。
If @dob <> @ori_dob
Begin
Update person set date_of_birth=@dob where id=@id
End
これはばかげた質問かもしれませんが、より良いアイデアがあればアドバイスをお願いします。