C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 件数制限あり更新処理


(過去ログ 125 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74282 / inTopicNo.1)  件数制限あり更新処理
  
□投稿者/ シャープ (5回)-(2014/12/15(Mon) 15:08:33)

分類:[データベース全般] 

SQL の UPDATE文について質問です。(DBはSQL SERVER2012です。)

UPDATE文の実行時、更新(条件)対象のレコード数が一定件数以上の場合、更新時間がかかる恐れが
あるので、対策として最大件数を決めてそれ以上の件数がある場合、更新後にアプリから再度UPDATE文を実行しようと考えています。
(一度更新したレコードはテーブルカラム値を更新し、次回更新対象としない)

この場合、下記のようなSQL文になりますでしょうか?
他に良い方法がないか模索しております。


例.
テーブル : tblSample
レコードID : id
更新データ : data
  更新済みフラグ : isUpdated
  
※最大更新件数 : 100


update tblSample
set data = 'XXX'
isUpdated = 1
where id in (
select TOP 100 id from tblSample
where isUpdated = 0
)
引用返信 編集キー/
■74283 / inTopicNo.2)  Re[1]: 件数制限あり更新処理
□投稿者/ shu (644回)-(2014/12/15(Mon) 15:25:24)
No74282 (シャープ さん) に返信

更新処理前にisUpdatedが0になっていればそれでよいと思います。
更新優先度があればOrderByなど付加するとなおよいかも。

ただし一度更新するとisUpdatedが1になってしまうのでそれを
どのように0にもどすかが課題になりそうですね。
引用返信 編集キー/
■74286 / inTopicNo.3)  Re[2]: 件数制限あり更新処理
□投稿者/ シャープ (6回)-(2014/12/15(Mon) 16:07:38)
ャープさん

ありがとうございます。確かにorder byがあった方が良いですね。

isUpdatedは一旦1にしたレコードは更新不要なので、戻す必要はないです。

例えば、201件の更新対象があった場合、
1st UPDATE実行 : isUpdated=0 → 101件
2nd UPDATE実行 : isUpdated=0 → 1件
3rd UPDATE実行 : isUpdated=0 → 0件

になるイメージです。

他の方法としては例えば、in句を使わない方法等がないか探しております。




No74283 (shu さん) に返信
> ■No74282 (シャープ さん) に返信
>
> 更新処理前にisUpdatedが0になっていればそれでよいと思います。
> 更新優先度があればOrderByなど付加するとなおよいかも。
>
> ただし一度更新するとisUpdatedが1になってしまうのでそれを
> どのように0にもどすかが課題になりそうですね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -