Große Parameterliste für die SQL-Abfrage

8

Ich habe eine große Liste von int-Parametern für eine SQL-Abfrage:

%Vor%

Mein Problem ist, dass es in SQL Server 2000 ein Limit für Parameter gibt. Ich könnte diese Abfrage auch auf einem SQL Server 2008 ausführen.

Was ist der bessere Weg, dies zu tun?

Bearbeiten:

Die Liste der IDs stammt aus einem C # Programm. Nicht von einer anderen Tabelle.

    
Floyd 25.10.2010, 16:08
quelle

7 Antworten

2

Die beste funktionierende Lösung für mich war SQL Server 2008: Table Valued Parameters

100000 Ids benötigt 14-20s, 1000 Ids benötigt ~ 140ms.

%Vor%

Der benutzerdefinierte Tabellen-Typ:

%Vor%     
Floyd 29.10.2010, 07:20
quelle
2

Sie können die Ganzzahlen in eine temporäre Tabelle einfügen und dann wie folgt abfragen:

%Vor%     
RedFilter 25.10.2010 16:09
quelle
2

Ein alternativer Ansatz, der mit SQL 2000 funktioniert, ist die Verwendung von XML.

Formatieren Sie das Programm / die Anwendung wie folgt:

%Vor%

.
Erstellen Sie dann die folgende gespeicherte Prozedur:

%Vor%

.
Dann kann Ihre Anwendung diesen SP aufrufen und einen potenziell riesigen Text / XML-Block übergeben.

Beachten Sie, dass bei root , TMP und J die Groß- / Kleinschreibung beachtet wird.

    
Brock Adams 26.10.2010 09:10
quelle
1

Um jeden Preis VERMEIDEN IN ; vor allem, wenn Sie nach 2000 sind. mein Backup

Verwenden Sie stattdessen EXISTS

%Vor%     
Brad 25.10.2010 16:16
quelle
0

Teilen Sie die Daten in kleinere Gruppen und führen Sie mehrere Aktualisierungsabfragen aus.

Es gibt keinen Grund, eine temporäre Tabelle zu verwenden, da Sie die Daten von außerhalb der Datenbank abrufen, so dass es nicht möglich ist, die Übertragung in Richtung db zu vermeiden.

    
Andy 26.10.2010 09:34
quelle
0

Wenn die Ints sequentiell sind (mehr als zwei auf einmal), könnten Sie sie in BETWEEN pairs machen.

Aber machen Sie in diesem Fall einfach eine Zeichenkette dieser Ints und übergeben Sie diese als einzelnen varchar(max) -Parameter.

    
Pasi Savolainen 26.10.2010 09:38
quelle
-2

Ich denke, dass Sie wahrscheinlich eine speicherbasierte temporäre Tabelle mit einem Index erstellen möchten. Angenommen, die Tabelle, die Sie abfragen, groß ist, möchten Sie keinen Tabellenscan durchführen, bei dem jede Zeile mit jeder Ihrer 5000 Übereinstimmungen verglichen wird. Sie möchten einen Join mit Hilfe von zwei Indizes durchführen.

%Vor%

SQL basierend auf MySQL, siehe:
Ссылка
Ссылка
Ссылка

    
David Parks 26.10.2010 10:13
quelle