こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

Delphi2010+SQL SERVER 2005で開発しています。

update文で、
現在下のようにwhileで複数レコードに対して、
1回、1回、sqlを発行して、更新しています。
これを、一度のSQLの発行で処理できないものでしょうか?
更新テーブルは1つで、更新する項目も同じです。
更新するデータと、where句の条件が異なります。

もし可能なようでしたら、どうかご教授お願いします。

update table set A=1,B=2 where id=1
update table set A=2,B=3 where id=5
update table set A=9,B=99 where id=7
update table set A=5,B=10 where id=15
update table set A=1,B=10 where id=75

投稿日時 - 2010-04-20 11:03:42

QNo.5838726

困ってます

質問者が選んだベストアンサー

ですか・・・。
じゃあWhileで発行するのをやめたらどうですか?

BEGIN TRAN
update table set A=1,B=2 where id=1;
update table set A=2,B=3 where id=5;
update table set A=9,B=99 where id=7;
update table set A=5,B=10 where id=15;
update table set A=1,B=10 where id=75;
COMMIT

まとめて実行・・・。

投稿日時 - 2010-04-21 15:18:30

お礼

ありがとうございました。
まさにおっしゃる通りで、できました。
まとめて、クエリを発行できることを知らなかったもので、
初歩の初歩なのかもしれませんが、
目から鱗でした。感謝です。

皆さんさんありがとうございました。

投稿日時 - 2010-04-21 15:42:08

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

いいかどうかはともかくとして。。

update table
SET
A=CASE id WHEN 1 THEN 1 WHEN 5 THEN 2 WHEN 7 THEN 9 WHEN 15 THEN 5 WHEN 75 THEN 1 END,
B=CASE id WHEN 1 THEN 2 WHEN 5 THEN 3 WHEN 7 THEN 99 WHEN 15 THEN 10 WHEN 75 THEN 10 END
WHERE id IN (1,5,7,15,75)

投稿日時 - 2010-04-20 19:30:53

お礼

ありがとうございます。
やってみたのですが、
whenの条件が最大で10万以上になってしまい、
どうやら文が長すぎてダメなようです。

投稿日時 - 2010-04-21 14:30:52

ANo.2

こんにちは

更新対象の値と条件を別テーブルに入れておけば、
INNER JOIN
でいいと思いますが。
単純に値渡しでやりたいのなら「無理」です・・・。

投稿日時 - 2010-04-20 14:14:17

お礼

時間短縮の為にやりたいので、
今回、gridの内容をそのまま保存する仕様でして、
別テーブルへ入れる時間がまた掛かってしまいますので、
難しいですね。。。

投稿日時 - 2010-04-21 14:33:28

ANo.1

IF id=1
 update table set A=1,B=2
ELSE
 IF id=5
  update table set A=2,B=3
(以下略)

で出来ると思います。
ただ、今は固定値だからいいですが、将来的に固定値でなくなる可能性がある場合は、SQLブロックの変数などを利用した方がいいです。(関係ないですがページデザイン変わったんですね・・・^^;)

投稿日時 - 2010-04-20 11:19:26

お礼

ありがとうございます。
考え方はつかめました。
条件がたくさんあるので、
caseでやってみましたが、
ダメなようです。

投稿日時 - 2010-04-21 14:31:46

あなたにオススメの質問