- ベストアンサー
1テーブル&複数レコードの更新に対して1度のupdate文での処理方法
- 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
- みんなの回答 (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 まとめて実行・・・。
その他の回答 (3)
- jamshid6
- ベストアンサー率88% (591/669)
いいかどうかはともかくとして。。 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)
お礼
ありがとうございます。 やってみたのですが、 whenの条件が最大で10万以上になってしまい、 どうやら文が長すぎてダメなようです。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは 更新対象の値と条件を別テーブルに入れておけば、 INNER JOIN でいいと思いますが。 単純に値渡しでやりたいのなら「無理」です・・・。
お礼
時間短縮の為にやりたいので、 今回、gridの内容をそのまま保存する仕様でして、 別テーブルへ入れる時間がまた掛かってしまいますので、 難しいですね。。。
- sykt1217
- ベストアンサー率34% (277/798)
IF id=1 update table set A=1,B=2 ELSE IF id=5 update table set A=2,B=3 (以下略) で出来ると思います。 ただ、今は固定値だからいいですが、将来的に固定値でなくなる可能性がある場合は、SQLブロックの変数などを利用した方がいいです。(関係ないですがページデザイン変わったんですね・・・^^;)
お礼
ありがとうございます。 考え方はつかめました。 条件がたくさんあるので、 caseでやってみましたが、 ダメなようです。
お礼
ありがとうございました。 まさにおっしゃる通りで、できました。 まとめて、クエリを発行できることを知らなかったもので、 初歩の初歩なのかもしれませんが、 目から鱗でした。感謝です。 皆さんさんありがとうございました。