楽観ロック、悲観ロックの考え方はとりあえず置いておいて、データ更新する場合の対策としては下記。
1、トランザクションを開始する。(トランザクションの間にロックがかかる)
2、更新対象のレコードを「with (xlock)」(排他ロック)で取得してくる。(この時点で取得したレコードは変更されないことになる)
3、更新対象のレコードが1、で取得してくる前の状態と同じであるかチェック(バージョン情報やUpdateTimeで)して、違う場合はロールバックで終了。(ここはロジックによってはいらないかもしれない)
4、更新を実行する。(コミット)
5、トランザクション終了でロックを解除する。