Anzeige

msSQL Text in Subselect aus Batch Job filtern


#1
Hallo Forum,

aktuell quäle ich mich mit dem folgenden Problem.

Über einen Batch Job lese ich "einen" Parameter ein, dieser sieht wie folgt aus:
-Indikator "'A' x 'B' x 'C'"

Nun wird dieser Wert in eine MS SQL Tabelle geschrieben.
Tabelle: "ARGS"
ARG_NAME | ARG_VALUE
Indikator | 'A' x 'B' x 'C'


Ziel:
Nun möchte ich diesen Wert nutzen um in einer Tabelle danach zu suchen.

SELECT
*
FROM
Tabelle A
WHERE
Name IN (SELECT REPLACE(ARG_VALUE,'x',',') FROM ARGS WHERE ARG_NAME = 'Indikator')

Leider führt dies zu keinem Ergebnis.

Wenn ich das Ergebnis des Substrings in das Where meiner Abfrage kopiere, also:

WHERE
Name IN ('A' x 'B' x 'C')

dann funktioniert es. Wo ist hier das Problem? ARG_Value ist vom Datentyp "nvarchar".


Vielen Dank vorab
 

Yaslaw

n/a
Moderator
#2
Das Einte ist ein SQL-Konstrukt, das Andere der Inhalt eines Feldes.
SQL:
-- Dein Test
Name IN ('A', 'B', 'C' )
-- Dein SQL
Name IN ("'A', 'B', 'C'")
Aber hier habe ich was gefudnen um die Zeilen aufzuteilen: https://stackoverflow.com/a/36305493

Hier meine Tests & Herleitung des folgenden Codes: http://sqlfiddle.com/#!18/53660/3/4
SQL:
SELECT *
FROM a
WHERE a.arg IN (
  SELECT TRIM(' ''' FROM cs.value)
  FROM args
  CROSS APPLY STRING_SPLIT(args.arg_value, 'x') cs
  WHERE args.arg_name = 'Indikator'
);
 
#3
Exzellent, leider setzen wir noch auf MS-SQL 2012, da ich keine Prozeduren einsetzen kann wäre wohl XML eine Möglichkeit dieses Problem zu lösen.

Auf jeden Fall schon mal vielen Dank für die Erleuchtung:
-- Dein Test
Name IN ('A', 'B', 'C' )
-- Dein SQL
Name IN ("'A', 'B', 'C'")
 

Yaslaw

n/a
Moderator
#4
XML? Naja, kann sein dass man das Einsetzen kann.

Ich kenne da MSSQL zu wenig. Eigentlich gar nicht. Ich habe die BEfehle so im WWW gefunden. Ich wusste einfach nach was ich suchen muss...
 
Anzeige
Anzeige