プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

ですか・・・。


じゃあ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

まとめて実行・・・。
    • good
    • 4
この回答へのお礼

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

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

お礼日時:2010/04/21 15:42

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



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)
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/21 14:30

こんにちは



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

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

お礼日時:2010/04/21 14:33

IF id=1


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

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

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

お礼日時:2010/04/21 14:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A