Fehler bei SQL Statement

OdinPG

Grünschnabel
hi
Ich habe gerade folgendes Problem: Ich möchte Datensätze aus einer Datenbanl auslesen. Nun kann es aber sein, dass das Datumsfeld gueltig_bis leer ist, weshalb ich versucht habe ein IF mit einzubauen.
Und genau da liegt jetzt mein Problem...
Ich bekomme immer die folgende Fehlermeldung: Falsche Syntax in der Nähe des THEN-Schlüsselwortes.
Wenn das Datumsfeld nicht leer ist, dann soll eine weitere Bedingung ans WHERE gehängt werden. Ansonsten nichts.

Hier ist der SQL String:
Code:
sql = "SELECT t_objekt_vertrag.id, t_objekt_vertrag.gueltig_ab, t_objekt_vertrag.gueltig_bis "
sql = sql & ",t_vertragsmgnt_zahlungsverkehr.id, t_vertragsmgnt_zahlungsverkehr.vertrag_id "
sql = sql & ",t_vertragsmgnt_zahlungsverkehr.objekt, t_vertragsmgnt_zahlungsverkehr.Kontoinhaber "
sql = sql & ",t_vertragsmgnt_zahlungsverkehr.Kontonr, t_vertragsmgnt_zahlungsverkehr.BLZ "
sql = sql & ",t_vertragsmgnt_zahlungsverkehr.Kreditinstitut, t_vertragsmgnt_zahlungsverkehr.Verwendungszweck "
sql = sql & ",t_vertragsmgnt_zahlungsverkehr.Waehrung " 
sql = sql & "FROM (t_objekt_vertrag RIGHT OUTER JOIN "
sql = sql & "t_vertragsmgnt_zahlungsverkehr ON t_vertragsmgnt_zahlungsverkehr.vertrag_id = t_objekt_vertrag.id) "
sql = sql & "WHERE DATEPART(yyyy, [t_objekt_vertrag].[gueltig_ab])<=" & Request.QueryString("Jahr") & " AND "
sql = sql & "DATEPART(yyyy, [t_objekt_vertrag].[gueltig_bis])>=" & Request.QueryString("Jahr") & " AND "
sql = sql & "DATEPART(mm, [t_objekt_vertrag].[gueltig_ab])<=" & monat & " "
sql = sql & "IF ISNULL([t_objekt_vertrag].[gueltig_bis], '') THEN "
sql = sql & " ' ' "
sql = sql & "ELSE THEN  'AND DATEPART(mm, [t_objekt_vertrag].[gueltig_bis])' "
sql = sql & "END "

Ich hoffe ihr könnt mir dabei helfen, denn ich weiss echt nicht mehr weiter :confused:
 
Hallo

Du musst das Feld sql-technisch abfragen und die Syntax ist von Datenbank zu Datenbank unterschiedlich.

bsp. Access

select iif(isnull(firma),'keine Firma vorhanden',firma) as fFirma from Tabelle

für MSSQL bzw. MySQL müsste ich selbst im Manual nachlesen. Ich glaube da wird mit case when gearbeitet.

Wie Du es machst, kann es aus 2 Gründen nicht funktionieren

1. Man kann kein Feld verarbeiten, was noch nicht selectiert worden ist
2. Die Syntax ist falsch (if - then - else - end if)

Man kann zwar eine SQL durch Abfragen dyn. aufbauen, hierfür muss aber die Anforderung über ein Formular, eine Session, Cookie oder Querystring kommen.

Nochwas, Du solltest keinen nicht überprüften QueryString auf die SQL loslassen, das ist eine enorme Sicherheitslücke. Such mal auf http://www.aspheute.com nach SQL Injection oder Parametrisierte Kommandos.
 
Zuletzt bearbeitet:
Hi
Vielen Dank für die Antwort.

Zum Thema SQL Injection, das wird nicht im Internet benutzt, sondern im intranet, wo man von aussen nicht drauf zugreifen kann.

Aber trotzdem danke für den Hinweis
 
Zurück