30. juli 2010 - 10:10Der er
15 kommentarer og 1 løsning
SQL SELECT fejl "expected lexical element not found: from"
Hej eksperter,
Jeg har lavet en ODBC forbindelse fra Excel til et system vi har der hedder Remedy (Arsystem). Det hele fungerer fint, men når jeg forsøger at lave følgende SELECT går det galt, og jeg ved ikke hvorfor.
SELECT "HPD:Solutions".Category, "HPD:Solutions"."Count" FROM "HPD:Solutions" "HPD:Solutions" WHERE ("HPD:Solutions".Type='Monitor')
Fejlen er: "expected lexical element not found from"
Det er "Count" kolonnen (med og uden anførselstegn) der laver rod i det hele. Ændrer jeg min SELECT-statement til en anden kolonne end Count, så kommer resultatet prompte.
Først troede jeg at det var fordi feltet kunne være null, men efter adskillige forsøg med ISNULL("HPD:Solutions"."Count",'0') osv. er jeg ikke kommet videre.
Jeg har dog en mistanke om at det er ordet "Count" der i bogstavligsteforstand er til gene. Er det mon fordi Count er et reserveret udtryk i SQL? Hvis ændrer kolonne-navnet til noget der ikke eksisterer får bare en alm "Din kolonne findes ikke"-fejl.
Hvordan undgår jeg at den tror jeg mener COUNT som i det reserverede keyword? Jeg har jo forsøgt med "-tegn for at angive det er en identifier. Jeg har også prøver med \, /, @ og @@ uden held.
Kan du give et eksempel på hvordan jeg gør det ud fra ovenstående SQL statement? Og vil det overhoved ændre noget når den stadig tror at "count" er et reserveret keyword?
Har nu prøvet med: SELECT "HPD:Solutions".Category, "HPD:Solutions"."Count" FROM "HPD:Solutions" "HPD:Solutions" WHERE ("HPD:Solutions".Type='Monitor') OR ("HPD:Solutions".Type='Laptop') GROUP BY "HPD:Solutions".Category
Den når slet ikke til "GROUP BY eftersom den SQL-parseren flipper ud over ordet Count inden den når så langt. Ville ønske jeg vidste hvilke tegn jeg skulle bruge for at den fattede Count er en identifier og ikke et keyword.
Du kan ikke bruge .Count du skal bruge count(*) ANSI-SQL på ODBC. Man kan ikke have en gruppefunktion i en række sammen med værdier der ikke er i gruppefunktion....
SELECT "HPD:Solutions".Category, "HPD:Solutions".Count(*) FROM "HPD:Solutions" "HPD:Solutions" WHERE "HPD:Solutions".Type='Monitor' GROUP BY "HPD:Solutions".Category;
Teepee - jeg er lidt i tvivl om hvorvidt du forstår min udfordring eller om jeg forstår dit svar.
Count er navnet på en kolonne jeg prøver at få værdierne ud af. Jeg prøver ikke at bruge Count funktionen i SQL.
Når jeg forsøger med ovenstående SQL-statement siger den blot: "Incorrect column expression: '"HPD:Solutions".Count(*)'."
Den column jeg forsøger at hente hedder "Count", hvilket jeg ikke kan få lov til eftersom Count er et reserveret keyword. Dog plejer man at kunne skrive det i anførselstegn så SQL opfatter det som en identifier for den pågældende column. Dog virker det ikke, men det er det jeg vil have hjælp til.
Jeg kan sagtens hente adskillige andre columns ud på én gang, UDEN at have GROUP BY.
F.eks. virker dette statement fint: SELECT "HPD:Solutions".Category, "HPD:Solutions"."User id", "HPD:Solutions"."Type*", "HPD:Solutions".Submitter FROM "HPD:Solutions" "HPD:Solutions" WHERE ("HPD:Solutions".Type='Monitor') OR ("HPD:Solutions".Type='Laptop')
Dem i dobbeltplinger skulle være ok, men måske der går noget galt på returen. Prøv at give kolonnen et alias i selecten også (ligesom du har gjort med tabellen)
Ellers tror jeg at du er ude i at omdøbe kolonnen, evt. lave et view på databasen hvor du bruger et ikke reserveret navn.
Det ser ikke ud til at virke - den æder slet ikke min column alias. Og jeg bliver ved med at modtage den samme fejl. "expected lexical element not found: from" :(
Jeg løste det i stedet ved at tilgå min DB fra access da kan finde ud af håndtere det korrekt. Jeg importerede DB via en wizard og fik på den måde alle columns.
Teepee & michael_stim, i får 100 point hver som tak for hjælpen (hvis michael lige melder sig på banen og laver et svar jeg kan tildele point).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.