Ich habe diese scheinbar einfache linq-to-sql-Abfrage, die einige Daten in mehreren Spalten durchsucht; etwas wie das:
%Vor%Der Fehler, den ich bekomme, ist dies:
Zusätzliche Information: Die eingehende Anfrage hat zu viele Parameter. Der Server unterstützt maximal 2100 Parameter. Reduziere die Anzahl von Parameter und senden Sie die Anfrage erneut.
Was ist der beste Weg, dies zu lösen?
Ich habe mich umgeschaut und eine Lösung, die ich gefunden habe, sieht so aus:
%Vor% Dies kompiliert und wirft keine Ausnahmen, aber scheint die Where
-Klauseln mit SomeString.Contains
Was ist die Lösung, damit diese Abfrage funktioniert?
Danke.
SQL unterstützt nicht mehr als 2100 Werte in in
-Anweisung, aber Sie können in mit Tabelle mit mehr als 2100 Zeilen verwenden, so dass Sie Ihre Daten in eine Tabelle einfügen und Ihre Abfrage ändern können, um in
mit zu überprüfen aus dieser Tabelle auswählen
zum Beispiel
%Vor% Die Spalteguid verhindert das Mischen verschiedener Benutzerdaten
in Ihrem Code
%Vor% Auch wenn Sie die IDs aus der Datenbank abrufen können, können Sie eine Tabellenwertfunktion in sql schreiben, um die IDs zurückzugeben und diese Funktion in Ihrem Code zu modellieren, sagen wir, ihr Name ist fnGetIds
.
Dann benutze es in deinem Code wie unten
Ich bekam das und nutzte 2100 Parameter nicht! Etwas anderes war im Gange.
Bei näherer Betrachtung habe ich herausgefunden, dass ich angeblich 5 Parameter in einer Schleife hinzugefügt habe, aber das Quellobjekt wurde nicht gelöscht, so dass die Liste der einzufügenden Objekte immer größer wurde.
%Vor%Ich musste vorher ein neues wwo Objekt abdimmen und es sortierte es
%Vor%Verwenden Sie 2 where-Klauseln:
%Vor%Aus Effizienzgründen könnten Sie den Code so umgestalten, dass es nur so funktioniert, wenn die Liste mehr als 2000 enthält:
%Vor%