Avatar billede martin181 Nybegynder
22. februar 2006 - 14:04 Der er 7 kommentarer og
1 løsning

Error converting data type varchar to numeric

Hejsa,

jeg sidder og er ved at opbygge et view, som jeg skal bruge til videre udtræk af data, men jeg får ovenstående fejl, når jeg prøver at "køre" det inde fra hvor jeg opbygger view'et...

Jeg har fundet ud af at det er flg. linie, der giver mig problemet:
ISNULL((SELECT TOP 1 Fee FROM RemLtr WHERE RemLtr.Ctry = Actor.Ctry AND RemLtr.LtrNo = OpCustTr.Rems); '')

Jeg kan oplyse flg.
RemLtr.LtrNo = tinyint
Actor.Ctry = int
OpCustTr.Rems = tinyint
RemLtr.Ctry = int

og resten af mit view ser ud som følger, bare for en god ordens skyld:
SELECT    dbo.OpCustTr.*, ISNULL
                          ((SELECT    TOP 1 ISO
                              FROM        Cur
                              WHERE    CurNo = OpCustTr.Cur), '') AS Cur_ISO, ISNULL
                          ((SELECT    TOP 1 txt
                              FROM        txt
                              WHERE    txt.lang = actor.lang AND opcusttr.votp = txt.txtno AND txt.txttp = 165), dbo.OpCustTr.Txt) AS TstSprog, dbo.GetCmpTxt(dbo.Actor.Lang, 2,
                      dbo.OpCustTr.Rems) AS Ryk_Txt, dbo.GetCmpTxtUl(dbo.Actor.Lang, 2, dbo.OpCustTr.Rems) AS Ryk_TxtUl
FROM        dbo.OpCustTr INNER JOIN
                      dbo.Actor ON dbo.OpCustTr.CustNo = dbo.Actor.CustNo

Jeg håber der er en af jer derude, der kan komme med en ide til hvordan jeg får dette løst...


Jeg bruger Microsoft SQL Server 2000 - hvis det kan hjælpe nogle...

og mit overliggende ERP system, hvis database jeg skal lave udtrækket fra Er Visma
Avatar billede ldanielsen Nybegynder
22. februar 2006 - 15:02 #1
Der er et sted hvor MSSQL vil oversætte en varchar til en numeric, og det går i fisk. Det er sandsynligvis en af WHERE-tingene, jeg har mistanke til:


... AND txt.txttp = 165), ...

Hvis txt.txttp er varchar, og indholdet ikke kan converteres til numeric, så kan det være det, skriv evt. i stedet:

... AND txt.txttp = '165'), ...
Avatar billede martin181 Nybegynder
22. februar 2006 - 15:27 #2
resten af mit view kører fint, incl. det med txt.txttp = 165
- det er først efter jeg smider flg. ind:
ISNULL((SELECT TOP 1 Fee FROM RemLtr WHERE RemLtr.Ctry = Actor.Ctry AND RemLtr.LtrNo = OpCustTr.Rems); '')

at jeg får problemet...
Avatar billede arne_v Ekspert
22. februar 2006 - 15:51 #3
skal det semikolon vaere der ?

og hvad returnerer en SELECT TOP uden en ORDER BY ?

men som ldanielsen siger: check data typer i de 2 where betingelser
Avatar billede martin181 Nybegynder
22. februar 2006 - 15:55 #4
Top 1 giver mig den første instans med indhold i - også uden en Order By - det er en funktion jeg bruger tit...

Og ja, der skal være et semikolon ; - ellers giver den en fejlmelding - kører man med en anden version (mener egentlig kun at det er sprog) så kan man istedet bruge et komma ,
Avatar billede martin181 Nybegynder
22. februar 2006 - 15:59 #5
Du, eller rettere I, skriver at jeg skal tjekke mine datatyper i mine where sætninger...

den jeg får fejlen på - den med RemLtr - den har jeg remset mine datatyper op på i mit spørgsmål - der er ingen uoverensstemmelser der...

Og resten - det der står med "select dbo.OpCustTr..." osv - det virker fint - jeg har brugt det i flere eksterne rapporter - så det har jeg tjekket masser af gange, der er ingen fejl mht. datatyperne...

Jeg skulle bare have den nye linie med, da den henter mit rykkergebyr med over, hvis der findes noget - det er derfor jeg bruger en ISNULL, så jeg kan styre hvad der skal ud, hvis der ikke er noget...
Avatar billede arne_v Ekspert
22. februar 2006 - 17:24 #6
ifoelge klassisk relationel database teori er raekkefoelge udefineret uden en ORDER BY

SQLServer goer sikkert et eller andet (sorterer efter primary key eller lignende)
Avatar billede martin181 Nybegynder
23. februar 2006 - 09:05 #7
Hej igen, så fik jeg fundet min fejl, min linie skulle være som følger:
ISNULL((SELECT TOP 1 Fee FROM RemLtr WHERE RemLtr.Ctry = Actor.Ctry AND RemLtr.LtrNo = OpCustTr.Rems); 0)

Min fejl var at jeg havde '' som værdi i min ISNULL og et tal kan jo ikke være ingenting, hvis jeg satte den til 0, så virkede det...

Jeg smider lige selv et svar, da ingen af jer har svaret men blot er kommet med kommentarer, som ikke rigtig har givet mig det rigtige...
Avatar billede ldanielsen Nybegynder
23. februar 2006 - 14:41 #8
helt ok.

Jeg fik jo ret, men det eneste jeg gjorde var at oversætte fejlmeldingen til dansk.

Du bruger semikolon fordi du skriver din ISNULL ind i View designeren, i den færdige kode bliver det lavet om til komma.
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