Я пытаюсь избежать доступа к базе данных в циклах в проекте, над которым я работаю. Не слишком хорошо разбираясь в SQL, я не уверен, что лучше всего подойти к этому.
Я обновляю базу данных уровня запасов в процедуре продажи с несколькими местоположениями складов / местами выбора.
Следовательно, это то, что я делаю.
Цикл по идентификаторам продуктов, затем цикл по пунктам выбора для каждого продукта и обновление количества по мере поступления, например:
For Each wProductId In calculatedProds.Keys '' loop through products requested passing values of pick locations
For i = 0 To locationCount ' split the location value from the string as per above
Dim thisLocation As Integer = locationID
Dim thisQty As Integer = qtyPicked
Dim sql As String = "UPDATE `stockLevels` SET `stockLevel`=`stockLevel` - '" & thisQty & "' WHERE `stockLocation`='" & thisLocation & "' AND `id`='" & wProductId & "'"
' DO DATA ACCESS WITH SQL ABOVE
Next
Next
Конечно, это работает, но оно открывает новое соединение с базой данных для каждого склада, для каждого предмета.
Так, как бы я превратил это в один оператор обновления?
http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/
Мне кажется, что эта ссылка очень приближает меня к тому, что мне нужно, но я не уверен на 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, как обычно, любая помощь очень ценится.