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 
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