我试图避免在我正在处理的项目中的循环中访问数据库。对SQL不太好,我不确定解决这个问题的最好方法。高效更新SQL,使用一条SQL语句更新多行,避免循环
我正在更新具有多个库存位置/拣配位置的销售过程中的库存水平数据库。
因此,这就是我正在做的。
通过产品ID循环,然后通过每个产品的选秀位置循环和更新数量,因为它去,如:
当然这个工作,但它是开放的每一个股票的新的数据库连接位置,为每个项目。
那么我如何将这个工作变成一个更新声明?
这种联系让我非常接近我所后,我想,但我不是100%确定如何动态地构建SQL语句,以及如何将两个条件添加到CASE。
我需要建立一个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!
我像往常一样使用MySQL和VB.NET,非常感谢。
哦,我明白了,所以它实际上只是一个没有在'case开头指定列名的情况'声明。然后我可以用两个参数运行'case'?这很简单!我知道我的语法错了,但不知道如何使它正确!谢谢!虽然SQL语句可能会变得很长,但是来自a'r的回答中的评论是有效的。就我而言,我们可能不会处理超过20个产品线,在大多数情况下,可能不会超过10个,您认为使用这种'case'声明是否是应对这种情况的最佳方式? – 2012-01-09 12:03:26
如果不超过20行,CASE解决方案对我来说似乎可行。尽管如此,我还是喜欢@ a'r的想法。您似乎并不十分确定您将来是否会处理更多的产品线,因此,至少,您可能需要考虑'a'r'的建议(或考虑在此实施点)。 – 2012-01-09 12:13:41
谢谢。我会接受这个答案,因为这是我最初想要的,但我认为@ a'r有更好的长期解决方案。虽然我从来没有使用过临时表,所以我现在要回避这个问题! – 2012-01-09 18:11:15