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.
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.
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()
:
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.
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 gelangenTags und Links sql database asp.net sql-server-2008 stored-procedures