• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1テーブル&複数レコードの更新に対して1度のupdate文での処理方法)

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

このQ&Aのポイント
  • Delphi2010+SQL SERVER 2005で開発しています。update文で、現在下のようにwhileで複数レコードに対して、1回、1回、sqlを発行して、更新しています。更新テーブルは1つで、更新する項目も同じです。更新するデータと、where句の条件が異なります。
  • 一度のSQLの発行で処理する方法があれば教えてください。
  • 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

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

  • ベストアンサー
回答No.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 まとめて実行・・・。

boooone
質問者

お礼

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

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.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)

boooone
質問者

お礼

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

回答No.2

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

boooone
質問者

お礼

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

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

IF id=1  update table set A=1,B=2 ELSE  IF id=5   update table set A=2,B=3 (以下略) で出来ると思います。 ただ、今は固定値だからいいですが、将来的に固定値でなくなる可能性がある場合は、SQLブロックの変数などを利用した方がいいです。(関係ないですがページデザイン変わったんですね・・・^^;)

boooone
質問者

お礼

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