私が取り組んでいるプロジェクト内のループでデータベースへのアクセスを避けようとしています。 SQLでうまくやっているわけではありませんが、私はこれにアプローチする最善の方法が不明です。効率的なSQLの更新複数の行を1つのSQL文で更新し、ループを回避する
私は複数の在庫場所/場所を選択した販売手順で在庫データベースを更新しています。
したがって、これは私がやっていることです。
のように、それが行くように各製品のピックの位置をループと数量を更新し、その後、製品IDのをループ:この作品もちろん
が、それはすべての株式の新しいデータベース接続を開いています場所は、すべてのアイテムに適用されます。
これをどのようにして1つの更新ステートメントにするのですか?
リンクは私が後だものに非常に近い私を取得することを、私は思うが、私は動的にSQL文を作成し、どのケースに二つの条件を追加する方法は100%を確認していません。
は、私のようなSQL文の何か構築する必要があります:
UPDATE stockLevels
SET stockLevel= CASE id
WHEN '"& wProductId &"' AND stockLocation='"& thisLocation &"' THEN `stockLevel` - '" & thisQty & "'
WHEN '"& NEXTwProductId &"' AND stockLocation='"& NEXTthisLocation &"' THEN `stockLevel` - '" & NEXTthisQty & "'
END
をしかし、私はCASEの2番目のパラメータを追加していた場合、それは修正しません!
いつものように、私はMySQLとVB.NETを使用しています。
ああ、わかりました。文字通り、ケースの開始時に列名を指定しないケースです'ステートメント。それでは、2つのパラメータで 'case'を実行できますか?それは簡単です!私が持っていた構文が間違っていることを知っていましたが、正しい方法を知らなかったのです!ありがとう! a'rからの回答は、SQLステートメントが非常に長くなる可能性があるという点では有効です。私の場合、たぶん20種類以上の製品ラインを扱っているわけではないでしょう。ほとんどの場合、10未満である可能性があります。このケースを使用することがこの状況に最適な方法でしょうか? –
20行以下の場合、CASEの解決策は私にとっては十分に可能なようです。それでも、私は一般的にはより良いアイデアが好きです。あなたは、今後もっと多くの製品ラインを扱わないかどうかは絶対に確信していないので、少なくとも、a'rの提案を念頭に置いておきたいと思うかもしれません。ポイント)。 –
ありがとうございます。私はこれが私が最初に探していたものなので、この答えを受け入れるつもりですが、私は@ a'rがより良い長期的解決策を持っていると思っています。私はテンポラリテーブルを使ったことがないので、今のところそれを恥ずかしく思っています! –