Mehrere varchars per Variable in den IN-Operator einschliessen

Joe1968

Benutzer
Beiträge
15
Hallo zusammen,

ich habe eine Frage, an der ich mir die Zähne ausbeisse. Ich möchte eine Abfrage machen, in der ein Reihe von varchars in einem IN-Operator vorkommt. Damit ich das nicht ständig neu tippen muss (und auch die SQL-Zeile nicht so lang wird), wollte ich das vorher in eine Variable packen.

In etwa so:
DECLARE @var varchar(10) = 'Harald', 'Marvin', 'Hugo'

SELECT *
FROM Tabelle
WHERE Name IN (@var)

Ich weiss natürlich, dass in der DECLARE-Anweisung durch die Hochkommas bei 'Harald' Schluss ist. Entweder muss das maskiert werden (habe aber schon alle möglichen Varianten ausprobiert, zwei Hochkommas, drei, zwei Gänsefüssschen etc.) oder es geht irgendwie mit einem Array. Allerdings sollen Arrays bei T-SQL ja nicht vorgesehen sein.

Hat jemand eine Idee, wie ich sowas in einer Variable speichern kann?

Viele Grüße
Joe
 
Werbung:
Die Hochstriche sind nicht dein Problem, die kann man z.B. durch 2 aufeinderfolgende Hochstriche statt einem ersetzen und er würde deine Variable befüllen (Stichwort Escape-Sequenzen).

Du kannst aber in einem SQL Query nicht ohne weiteres Variablen als Code nutzen, in deinem Fall würde deine IN Werte-Liste nur einen Wert haben der dem kompletten Text aus der Variablen entspricht. Damit das so läuft müsstest du dynamisches SQL einsetzen, das ist unübersichtlicher und aufwendiger.

Ich empfehle dir eine Hilfstabelle mit all deinen VARCHAR Werten, die kannst du mit IN bequem abgleichen.
 
Wenn ich dich richtig verstehe, willst du ein Paramter in eine IN funktion bringen. =per einen SSRS oder so füllst du die Parameter oder einfach nur über EXEC, aber wenn du ein auswähölst dürfte es gehen, oder? und bei mehren nicht, stimmts? Dann musst du ne split funktion einbauen das es dir immer ein , nach jeden varchar rein macht. das funktioniert dann.
sorry für die rechtschreib fehler aber hab grad kb am handy alles richtig zu schreiben :D
 
hmmm, ich glaube theoretisch verstehe ich was du meinst. Nur praktisch weiß ich nicht, wie ich das umsetzen soll.
Wenn Du wieder an einem Rechner sitzt, kannst Du das kurz als Beispiel posten?
 
Werbung:
Ouh, sorry, bin nicht so aktiv, aber hier wenn du es noch nicht hast:

DECLARE @toSplit TABLE
(
String VARCHAR(50)
);
INSERT INTO @toSplit
( Klassifizierung
)
SELECT LTRIM(RTRIM(strval))
FROM split(@toSplit, ',');

oder

COALESCE(@toSplit + ', ', '')

Google am besten, was die zwei Funktionen machen, das man es leicht versteht. ;)
 
Zurück
Oben