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
ですか・・・。
じゃあ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)
いいかどうかはともかくとして。。
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
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