Select IN () Statement

HAllo liebe wwwler,
ich habe eine Frage zu einem „select in ()“ statement

Möchte gerne eine varchar(100) Spalte über den in () Tag filtern!

Der T-SQL-BEfehl funktioniert einwandfrei:

SELECT
COUNT(T.[GUID])
FROM VIEW T WHERE T.SPALTE IN (‚Wert1‘,‚Wert2‘)

Nun möchte ich den IN-Wert aber variabel in eine Prozedur integrieren!
Das funktioniert dann aber leider nicht mehr?! Kann mir einer sagen wieso und warum?

BEGIN
DECLARE @IN_STRING AS VARCHAR(500)
SELECT @IN_STRING = MEINE_SPALTE FROM MEINE TABELLE where GUID = 4711
SELECT
COUNT(T.[GUID])
FROM VIEW T WHERE T.SPALTE IN (@IN_STRING)
END

Ich erhalte zwar ein Recordset aber nur leer. D.h der IN-STRING wird nicht gefunden, obwohl Werte vorhanden sind!

Moin, Marion,

schau Dir mal an, was vor der Ausführung von

SELECT
COUNT(T.[GUID])
FROM VIEW T WHERE T.SPALTE IN (@IN_STRING)

in @IN_STRING steht. Ich hab zwar schon ewig nicht mehr mit Embedded SQL gearbeitet, aber dass der String „‚Wert1‘,‚Wert2‘“ enthält, glaube ich nicht so recht.

Gruß Ralf

Embedded SQL gearbeitet, aber dass der String
„‚Wert1‘,‚Wert2‘“ enthält, glaube ich nicht so recht.

Gruß Ralf

Ralf der String enthält ‚Wert1‘,‚Wert2‘
Somit fehlen die Anführungszeichen!

Ja sou a Durchanand (wohl mein Fehler): Welche? Die Gänsefüße sind von mir, um die Zeichenkette einzurahmen. Im String selbst sollten nur die Werte selbst in Anführungszeichen stehen, jeweils mit einem Komma dazwischen.

Möglicherweise müssen das aber Gänsefüße sein; manche DBMS sind da sehr heikel.

Gruß Ralf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Neuer Versuch: Was tut der Preprocessor?
Hi Marion,

ich frage mich gerade, was der Preprocessor aus

FROM VIEW T WHERE T.SPALTE IN (@IN_STRING)

macht: Er erwartet in der Klammer schließlich keinen String, sondern eine Werteliste.

Hast Du eine Möglichkeit, die komplette Anweisung unmittelbar vor der Ausführung anzuzeigen? Aus DB2-Zeiten erinnere ich mich dunkel an EXPLAIN.

Gruß Ralf

Letzter Versuch :smile:
Moin, Marion,

nichts sollte Dich davon abhalten, direkt zu schreiben:

 SELECT COUNT(T.[GUID])
 FROM VIEW T 
 WHERE T.SPALTE IN 
 (SELECT MEINE\_SPALTE 
 FROM MEINE\_TABELLE 
 where GUID = 4711)

Gruß Ralf