01. september 2005 - 07:46Der er
23 kommentarer og 1 løsning
SQL ved brug af MSSQL istedet for Access
Det er nu endelig lykkedes mig at få mit system konverteret til MSSQL database istedet for Access, dog har jeg lige et problem jeg ikke kan få løst.
På en side laver jeg en alfabestisk oversigt over alle siderne på sitet og øverst på denne side har jeg så alfabetet opstillet med hyperlinks til længere nede på siden.
Neden stående kode laver dette alfabet og virker fint hvis jeg bruger Access, men ikke ved MSSQL, der kommer den med følgende fejlbesked:
Microsoft OLE DB Provider for SQL Server error '80040e14' The isnull function requires 2 arguments.
<KODEN>
SQL = "SELECT distinct left(menupunkt,1) as bogstav FROM (SELECT * from TBL_pages where hovedegenskaber=1 and aktiv=1 and isnull(show_menu) or hovedegenskaber=0 and aktiv=1 and indgang=1 and show_menu='checked' and show_in_sitemap='checked' ORDER BY left(menupunkt,1))"
Microsoft OLE DB Provider for SQL Server error '80040e14' The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.
SQL = " SELECT distinct left(menupunkt,1) AS bogstav FROM ( SELECT TOP 30 * FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ORDER BY left(menupunkt,1)) "
SQL = " SELECT distinct left(menupunkt,1) AS bogstav FROM ( SELECT FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ) ORDER BY bogstav "
SQL = " SELECT distinct bogstav FROM ( SELECT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ) ORDER BY bogstav "
Microsoft OLE DB Provider for SQL Server error '80040e14' Incorrect syntax near the keyword 'ORDER'.
- ved koden:
SQL = "SELECT distinct bogstav FROM (SELECT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked')ORDER BY bogstav"
Jeg forstår ikke lige din sidste kommentar, mangler der * i ovenstående SQL ?
Nej, der mangler netop ikke noget *-tegn; Jeg havde fået fjernet dit oprindelige *-tegn ved et uheld, men lavede så til gengæld en mere effektiv løsning. :^)
Hvad angår fejlen: Prøv lige at sætte et mellemrum ind før ORDER BY.
Jeg prøvede lige at fjerne den første distinct sætning således at min SQL nu er:
SQL = "SELECT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ORDER BY bogstav"
- og så udskriver den godt nok alfabetet men naturligvis mere end én forekomst af hvert bogstav.
Kan det være distinct der skal erstattes af noget andet ?
SQL = "SELECT DISTINCT bogstav FROM (SELECT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked') ORDER BY bogstav"
Du gjorde vist lidt mere end bare at slette DISTINCT og parenteser - der var også nogle led som stod andre steder. Derfor måtte jeg lige sikre mig.
Underligt med den fejl-meddelelse, den kan jeg ikke lige greje... Hvordan med deludtrykket:
SELECT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked'
Prøv denne version - den bruger ikke en nested SQL:
SQL = "SELECT DISTINCT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ORDER BY bogstav"
Forklare hvad præcist? Umiddelbart burde strukturen i SQL-sætningen være simpel nok:
SQL = " SELECT DISTINCT left(menupunkt,1) AS bogstav FROM TBL_pages WHERE hovedegenskaber=1 AND aktiv=1 AND show_menu IS NULL OR hovedegenskaber=0 AND aktiv=1 AND indgang=1 AND show_menu='checked' AND show_in_sitemap='checked' ORDER BY bogstav "
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.