Bestellung von SQL Server-Ergebnissen nach IN-Klausel

8

Ich habe eine gespeicherte Prozedur, die die IN-Klausel verwendet. In meiner ASP.NET-Anwendung habe ich ein mehrzeiliges Textfeld, das Werte an die gespeicherte Prozedur liefert. Ich möchte nach den Werten sortieren können, wie sie in das Textfeld eingegeben wurden. Ich habe herausgefunden, wie man das in mySQL (mit der FIELD-Funktion) leicht macht, aber nicht in einem SQL Server-Äquivalent.

So sieht meine Abfrage aus:

%Vor%

Also würde ich Werte aus meiner Anwendung wie '113113', '112112', '114114' (in beliebiger Reihenfolge) übergeben. Ich möchte die Ergebnisse nach dieser Liste sortieren.

Wäre eine CASE-Aussage machbar? Ich würde nicht wissen, wie viele Artikel in den Textboxdaten kommen.

    
Andrew 20.01.2012, 20:19
quelle

3 Antworten

5

Wie parametrieren Sie die IN -Klausel?

Wie Sie in SQL Server 2008 sind, würde ich einen Table Valued Parameter mit zwei übergeben Spalten item und sort_order und treten Sie stattdessen bei. Dann können Sie einfach ein ORDER BY sort_order am Ende hinzufügen.

    
Martin Smith 20.01.2012, 20:21
quelle
2

Aus dem Kommentar von KM oben ...

Ich weiß, dass Sie nicht angegeben haben, dass es durch Komma getrennt ist, aber wenn es sich um eine CSV-Datei handelt oder wenn Sie den Speicher getrennt haben, können Sie Folgendes tun:

%Vor%

Und dann erstellen Sie fn_IntegerInList() :

%Vor%

Auf diese Weise erstellt Ihre Funktion eine Tabelle, die eine Sortierreihenfolge enthält, nämlich SortOrder und die ID oder Nummer, die Sie übergeben. Sie können dies natürlich so ändern, dass Sie nach Leerzeichen statt nach% co_de suchen % -Werte Ansonsten hat Martin in seiner Antwort die richtige Idee. Bitte beachten Sie, dass ich in meinem Beispiel eine meiner Tabellen verwende. Daher müssen Sie den Namen , auf das ändern, mit dem Sie zu tun haben.

    
JonH 20.01.2012 20:52
quelle
1

Wie Sie verketten ('113113', '112112', '114114'), um zu dem SQL-Satz in der WHERE-Klausel zu gelangen, die Sie verketten können

%Vor%

um durch clausule

zu Ihrer Bestellung zu gelangen     
Luis Siquot 20.01.2012 20:29
quelle