Avatar billede dougheffernan Nybegynder
17. februar 2006 - 11:52 Der er 17 kommentarer og
1 løsning

Forespørgsel virker ikke (INNER JOIN)

Jeg har fået til opgave at lave en DST pakke og mente at det nemmeste ville være at bruge SQL Server's Import data funktion, men jeg er stødt ind i problemer.
Dataene kommer fra Navision tabeller (vha. C/ODBC driver).

Det går fint med at vælge Source og Destination databaser, men når jeg skal vælge hvilke data der skal overføres (vha. Query Builderen i SQL Server Management Console), så vil den ikke parse min Query!

Her er SQL'en (den parser fint i SQL Query Analyzer)

Select "Købslinie"."Bilagsnr_", "Købslinie"."Type", "Købslinie"."Nummer", "Købslinie"."Beskrivelse", "Købslinie"."Anlægsbogføringstype", "Købslinie"."FinansAntal", "Købslinie"."Afdelingskode", "Købshoved"."Virksomheds-bogføringsgruppe", "Købslinie"."Produkt-bogføringsgruppe", "Købslinie"."Købspris"
FROM "Købshoved" INNER JOIN "Købslinie" ON "Købshoved"."Nummer" = "Købslinie"."Bilagsnr_"
WHERE "Købslinie"."Bilagstype"=1 AND
"Købslinie"."Nummer" Is Not Null
order by "Købslinie"."Bilagsnr_"
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 12:09 #1
Hvad er meningen med alle de " 'er?

Skal de være der?
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 12:10 #2
Erstat dem med [ og ]

Select [Købslinie].[Bilagsnr_], [Købslinie].[Type], [Købslinie].[Nummer],  osv osv
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 12:16 #3
Samme fejl med

select [Købslinie].[Bilagsnr_], [Købslinie].[Type], [Købslinie].[Nummer], [Købslinie].[Beskrivelse], [Købslinie].[Anlægsbogføringstype], [Købslinie].[FinansAntal], [Købslinie].[Afdelingskode],[Købshoved].[Virksomheds-bogføringsgruppe], [Købslinie].[Produkt-bogføringsgruppe], [Købslinie].[Købspris]
FROM [Købshoved] INNER JOIN [Købslinie] ON [Købshoved].[Nummer] = [Købslinie].[Bilagsnr_]
WHERE [Købslinie].[Bilagstype]=1 AND
[Købslinie].[Nummer] Is Not Null
order by [Købslinie].[Bilagsnr_]
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 12:17 #4
Det er som om SQL Server  - Import data  ikke kan finde ud af at Join'e 2 Navision tabeller.
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 12:54 #5
Jeg ved det ikke. Har stadig mistanke ti de danske bogstaver m.m.

Kan du lave en test på nogle tabeller med navne og feltnavne der ikke indeholder danske bogstaver, mellemrum m.m, så " eller [] helt kan undgås?
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 13:08 #6
Jeg kan sagtens hente data fra kun én tabel, uanset om der er æ, ø eller å i tabel/felt-navnene.
Jeg har forsøgt med ", [] og uden - ingen forskel.
Fejlmeddelelsen:

Unexpected error occoured. The provider has returned an error result without an error message.
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 13:11 #7
Følgende "parser" fint:

select "Købslinie"."Bilagsnr_", "Købslinie"."Type", "Købslinie"."Nummer", "Købslinie"."Beskrivelse", "Købslinie"."Anlægsbogføringstype", "Købslinie"."FinansAntal", "Købslinie"."Afdelingskode", "Købshoved"."Virksomheds-bogføringsgruppe", "Købslinie"."Produkt-bogføringsgruppe", "Købslinie"."Købspris"
FROM "Købshoved", "Købslinie" WHERE "Købslinie"."Bilagstype"=1 AND
"Købslinie"."Nummer" Is Not Null
order by "Købslinie"."Bilagsnr_"
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 13:14 #8
Ordet INNER vises i blå bogstaver, JOIN i grå...har det nogen betydning?
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 13:27 #9
Farvekoderne er korrekte, og betyder at udtrykkene er genkendte, men sikrer ikke syntaksen.

Det lader faktisk til at det er join'et der gør det. Hvilken datatype er de to felter som du joiner på, [Købshoved].[Nummer] og [Købslinie].[Bilagsnr_]? Jeg mener nemlig ikke at MSSQL tillader joins på alle datatyper, fx. er jeg i tvivl om float og decimal datatyperne.


Kan du oprette et viwe i navision, som man kan det i MSSQL? Så vil du derefter kunne importere resultatet af dette view, og derigennem få et du søger.
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 13:41 #10
I de sammenkædede tabeller i min Access test-database, er de 2 felter fra Navision af typen Tekst og begge størrelse 21.

Jeg kender INTET til Navision, henter kun data fra databasen tabeller vha. ODBC forbindelser, men det har vi vel en eksper der kan...
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 14:17 #11
Prøv den "lette" syntaks:

select [Købslinie].[Bilagsnr_], [Købslinie].[Type], [Købslinie].[Nummer], [Købslinie].[Beskrivelse], [Købslinie].[Anlægsbogføringstype], [Købslinie].[FinansAntal], [Købslinie].[Afdelingskode],[Købshoved].[Virksomheds-bogføringsgruppe], [Købslinie].[Produkt-bogføringsgruppe], [Købslinie].[Købspris]
FROM [Købshoved], [Købslinie] WHERE [Købshoved].[Nummer] = [Købslinie].[Bilagsnr_]
AND [Købslinie].[Bilagstype]=1 AND
[Købslinie].[Nummer] Is Not Null
order by [Købslinie].[Bilagsnr_]
Avatar billede ldanielsen Nybegynder
17. februar 2006 - 14:18 #12
evt også med "

Syntaksen er

SELECT <collist> FROM Table1, Table2 WHERE Table1.Col = Table2.Col

Sådan joiner mange mysql'ere for eks., og det virker i MSSQL og Access
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 14:34 #13
Den lette syntax har jeg prøvet og det giver TONSVIS af poster (992 for et givent Bilagsnr, hvor der reelt kun er 6).
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 14:35 #14
Ovenstående er jo en Cross join (Cartesian join), som vil give alle resultater fra den ene tabel, multipliceret med antallet af resultater fra den anden tabel.
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 14:39 #15
Sorry, my mistake, det virker jo i Access (men ikke i SQL Server) :(
Avatar billede dougheffernan Nybegynder
17. februar 2006 - 15:32 #16
Så var den der, også i SQL Server! Læg et svar, så du kan få dine velfortjente point! :)
Avatar billede ldanielsen Nybegynder
20. februar 2006 - 09:09 #17
Tak for det.

Det er (håber jeg) ikke et CROSS JOIN, vel? Jeg bruger ikke syntaksen selv, men regner da med at jeg kender den.

En lille test her viser at det også i MSSQL fungerer som et INNER JOIN.
Avatar billede dougheffernan Nybegynder
20. februar 2006 - 13:29 #18
ja, det gør det (virker som et inner join). Tak for hjælpen, ldanielsen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester