Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - SQL Abfrage mit IIF
Nordstern - Mi 01.12.10 13:06
Titel: SQL Abfrage mit IIF
Hallo,
ich versuche im Dataset-Designer (Visual Studio 2008) eine Spalte in einer Tableadapter mit folgender Abfrage zu erstellen.
SELECT *,
IIf(Format([Datum],"dd")>30,"gross","klein") AS Test
FROM tabelleXY
Die Verbindung erfolgt über OLBDB auf eine Access 2003 Datenbank.
Die Abfrage liefert das gewünschte Ergebniss, jedoch erhalte ich folgende Fehlermeldung:
Fehler in der Liste der Funktionsargumente ">" wurde nicht erkannt.
Somit kann ich das Ergebniss nicht weiterverwenden.
Kann mir jemend helfen??
Vielen Dank im vorraus.
Trashkid2000 - Do 02.12.10 23:47
Hallo,
Nordstern hat folgendes geschrieben : |
Die Abfrage liefert das gewünschte Ergebniss, jedoch erhalte ich folgende Fehlermeldung:
Fehler in der Liste der Funktionsargumente ">" wurde nicht erkannt.
|
Wie jetzt? Ich kenne keine SQL-Statements, die einerseits eine Fehlermeldung ausgeben, anderseits aber das richtige Ergebnis.
Es gibt eigentlich gar kein IIf in T-SQL. Dazu diese Seite:
http://www.insidesql.org/blogs/frankkalis/2004/07/13/iif-in-t-sql
Sieht so aus, als ob Du das in ein CASE pumschreiben musst.
Marko
Trashkid2000 - Fr 03.12.10 08:32
Hmm, ich glaube, dass es das Format auch nicht so in T-SQL gibt.
Aber so müsste es gehen:
SQL-Anweisung
1: 2:
| SELECT *, CASE WHEN DAY([Datum]) > 30 THEN 'gross' ELSE 'klein' END FROM tabelleXY; |
LG
jaenicke - Fr 03.12.10 10:35
Trashkid2000 hat folgendes geschrieben : |
Es gibt eigentlich gar kein IIf in T-SQL. |
Das stimmt nicht. Access 2003 kennt sehr wohl ein iif. Du kannst damit allerdings leider keine weitere Auswertung vornehmen. Deshalb kannst du kein > oder < oder so als Operator darin benutzen.
Für so etwas geht wirklich nur case. Nichtsdestotrotz gibt es iif, nur ist es eben nicht so mächtig.
Nordstern - So 05.12.10 19:01
Hallo, Danke für die Informationen. Leider ist mein Problem noch nicht gelöst. Wahrscheinlich habe ich die Frage nicht richtig formuliert.
Ich arbeite im Designer mit einem Table-Adapter-Konfiguration-Assistent. Wenn ich im Abfragegenerator mein SQL eintrage und dann den Button 'Abfrage ausführen' bekomme ich mit IIF das richtige Ergebniss. Jedoch beim Fertigstellen des Assitenten bekomme ich die genannte Fehlermeldung.
Wenn ich
SELECT CASE WHEN [DAY]([Datum]) > 30 THEN 'gross' ELSE 'klein' END AS XYZ
FROM tabelleXY
benutze erhalte ich folgende Fehlermeldung:
E_FAIL(ox80004005) in IErrorInfo.Get.Description
Vieleicht hat noch jemand eine Idee.
Vielen Dank
jaenicke - So 05.12.10 19:08
Nordstern hat folgendes geschrieben : |
SELECT CASE WHEN [DAY]([Datum]) > 30 THEN 'gross' ELSE 'klein' END AS XYZ
FROM tabelleXY |
Day ist ja nun eine Funktion, und so sieht ja nun kein Funktionsaufruf auf. Wie sieht es denn aus, wenn du es machst wie oben schon gepostet?
Trashkid2000 hat folgendes geschrieben : |
SQL-Anweisung 1: 2:
| SELECT *, CASE WHEN DAY([Datum]) > 30 THEN 'gross' ELSE 'klein' END FROM tabelleXY; | LG |
Nordstern - So 05.12.10 20:05
Hallo,
Danke für die schnelle Antwort. Leider gleicher Fehler. Die eckigen Klammer hat VS selbständig eingefügt, deshalb ist es mir zuerst nicht aufgefallen.
Das es aber daran nicht liegt, habe ich es mit folgenden Test versucht. (einfach ein anderes Feld benutzt, Text statt Datum)
SELECT *, CASE WHEN von = 'XXX' Then 'gross' ELSE 'klein' END
FROM tabelleXY
mfg Steffen
stendate - Do 23.12.10 00:11
Nordstern hat folgendes geschrieben : |
Hallo,
SELECT *, CASE WHEN von = 'XXX' Then 'gross' ELSE 'klein' END
FROM tabelleXY
|
CASE WHEN ist, wie oben schon erwähnt T-SQL, damit kann die JET-Engine nix anfangen.
Was definitiv geht ist über OLEDB den IIF-Ausdruck zu verwenden, aber nicht im DataSet-Designer sondern im Source als String, nicht so schön aber praktikabel. Das geht auf alle Fälle und muss bei Migration auf SQL-Server eben auf CASE WHEN umgeschrieben werden.
Bei Format() bin ich mir gerade nicht sicher, ich glaube das geht nicht, mit etwas Glück läuft es wenn du das im Jet-Backend als View speicherst und dann das View anstatt der Tabelle im DataSet-Designer ansprichst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!