Aktualisieren Sie mehrere Zeilen in einer einzigen SQL server-Abfrage – in VBA

Ich benutze VBA, um eine Access-database mit dem folgenden Code zu aktualisieren:

For i = 1 To imax strSql = "UPDATE Products SET Price ='" & vArray(i, 2) & "' WHERE ID = '" & vArray(i, 1) & "';" connDB.Execute (strSql) Next i 

Das funktioniert aber kann sehr langsam sein, da es zwischen 5.000 und 10.000 Zeilen zu aktualisieren (imax) gibt.

Gibt es eine Möglichkeit, stattdessen eine einzelne SQL-statement zu verwenden?

Ich habe Jatins Vorschlag unten ausprobiert. Leider fliegt es nicht auf meiner Seite (ein Versuch auf den ersten drei Reihen unten):

 UPDATE p SET p.Price = x.SetValue FROM Products p INNER JOIN ( SELECT '149' AS SetValue, 'P100005' AS WhereValue UNION ALL SELECT '129' AS SetValue, 'P100001' AS WhereValue UNION ALL SELECT '99' AS SetValue, 'P100002' AS WhereValue ) AS x ON p.ID = x.WhereValue; 

Ich bin kein Experte für VBA, aber so etwas wie unten wird die Aufgabe erledigen.

 strValues = "INNER JOIN (VALUES " For i = 1 To imax strValues = strValues & IIF(i = 1,"",",") & "('" & vArray(i, 2) & "', '" & vArray(i, 1) & "')" Next i strValues = strValues & " ) AS x(SetValue, WhereValue) ON p.ID = x.WhereValue " strSql = "UPDATE p SET p.Price = x.SetValue FROM Products p " & strValues connDB.Execute (strSql) 

unten ist eine alternative Lösung, es baut Werttabelle mit UNION ALL.

 strValues = "INNER JOIN (" For i = 1 To imax strValues = strValues & vbCrLf & "SELECT '" & vArray(i, 2) & "' AS SetValue, '" & vArray(i, 1) & "' AS WhereValue " & IIF(i = imax,""," UNION ALL ") 'skip Union All for last entry Next i strValues = strValues & " ) AS x ON p.ID = x.WhereValue " strSql = "UPDATE p SET p.Price = x.SetValue FROM Products p " & strValues connDB.Execute (strSql) 

Es tut mir leid, aber es gibt keine solche Aussage für diese. Du musst es in diesem Fall so machen.