Durch Komma Getrennte SQL-string Müssen getrennt
Habe ich diese Zeichenfolge, ich bin immer aus .net-Anwendung
A,B,C,D,E,F,
Wollte ich schreiben, um eine sql-select-Anweisung wie
set @string = 'A,B,C,D,E,F'
select * from tbl_test
where tbl_test.code in (@string)
Das klappt nicht in t-SQL, weil es mit der @string
wie eine Schnur, es ist nicht die Trennung der Werte. Gibt es irgendwelche Möglichkeiten, wie ich dies tun kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Er glaube, der einfachste Weg, es zu tun, werden dynamische SQL-Generierung:
3 Optionen
Sehr Häufig gestellte Frage! Was Sie wollen, ist eine Tabellenwert-Funktion.
Aber das Rad nicht neu erfinden, durch das schreiben der eigenen, fand ich Dutzende nur durch Googeln
sql split
. Hier ist eine von Microsoft:http://code.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=StringArrayInput
Ich verwendet, um dynamisches SQL verwenden, aber das bedeutete, dass ich hatte, zu Graben, bis Sie den code, und kopieren Sie es in jeder neuen app. Jetzt habe ich nicht einmal daran zu denken.
Einer dynamischen Klausel bedeutet entweder:
Dynamische SQL-Beispiel
Daran, dass
sp_executesql
ist 2005+, und bevorzugt, da es speichert die Abfrage-plan. Lesen Der Fluch und Segen von Dynamischem SQL für mehr detail, aber bewusst sein,SQL-injection-Angriffe.Erstellen Sie eine Benutzer-Definierte Funktion nimmt einen string als Eingabe und gibt eine Tabelle:
Dann stellen Sie Ihre Select-Anweisung:
Hier ist eine Funktion, gibt eine durch Trennzeichen getrennte Zeichenfolge als eine Reihe von Zeilen
Haben Sie mehrere Möglichkeiten:
IN
AnweisungIN
oder besser, nurJOIN
- Anweisung (unter anderen Implementierungen, die ich zugunsten SQL-Benutzer-Definierte Funktion zum Analysieren einer durch Trennzeichen Getrennte Zeichenfolge).Dem Sie code wäre:
SQL
.Konnte Sie halten es wirklich einfach mit built-in-sql-Funktionen:
PATINDEX verwendet werden können, in Fall müssen Sie mehr als ein Zeichen.
Nichts einfach. Sie können eine Funktion schreiben, die in dieser Liste und teilen Sie es auseinander in einer Tabelle Sie können die Abfrage in der IN () - Anweisung.
Ich weiß, das ist eine alte Frage, aber ich dachte, ich würde post, eine Antwort darauf sowieso. Ich mochte nie vorbei in einen kommagetrennten string-Werte, so habe ich verwendet XML in der Vergangenheit und die mit einer join-Anweisung für die xml-wie so:
Ich denke, der einfachste Weg ist als unten,
Option1:
Option2: