Die eingehende Anfrage hat zu viele Parameter. Der Server unterstützt maximal 2100 Parameter

8

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

zu ignorieren

Was ist die Lösung, damit diese Abfrage funktioniert?

Danke.

    
frenchie 13.04.2014, 17:27
quelle

4 Antworten

6

Ganz einfach - solange TheTAbleIDs weniger als 2100 IDs enthalten, ist dies nicht erlaubt.

Schneiden Sie die Tabelle in Blöcke von 2000 und dann jeden Block separat ab, möglicherweise in mehreren Threads.

    
TomTom 13.04.2014, 17:30
quelle
4

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 Spalte

guid 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

%Vor%     
RezaRahmati 13.04.2014 17:55
quelle
1

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%     
bendecko 18.03.2015 18:21
quelle
0

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%     
tyler_mitchell 11.09.2017 10:46
quelle

Tags und Links