Avatar billede thrakrath Nybegynder
08. oktober 2001 - 19:48 Der er 13 kommentarer og
1 løsning

Konvertering af varchar til int

Hej jeg har en stored procedure der generer følgende fejl:

\"Syntax error converting the varchar value \'7,3\' to a column of data type int.\"

Min kode ser således ud:

Declare @Kategori_ID Int,
        @Temp_Kategori_ID Varchar(50)

Declare cSelect Cursor For (
                Select Kategori_ID From tbl_Menu
            )
            Open cSelect
            Fetch Next From cSelect Into @Kategori_ID
            While (@@Fetch_Status = 0) Begin
                If @Temp_Kategori_ID2 Is NULL Begin
                    Set @Temp_Kategori_ID = @Kategori_ID
                End Else Begin
                    Set @Temp_Kategori_ID = @Temp_Kategori_ID + \', \' + @Kategori_ID
                End
                Fetch Next From cSelect Into @Kategori_ID
            End
            Close cSelect
            Deallocate cSelect
            Print @Temp_Kategori_ID2
        Select * From tbl_Kategori Where Kategori_Sub_ID in (@Temp_Kategori_ID)
        End


Avatar billede thrakrath Nybegynder
08. oktober 2001 - 19:50 #1
@Temp_Kategori_ID har så værdien \"7,3\" og jeg vil gerne slå denne op i tabellen tbl_Kategori og det er så i dette opslag at fejlen genereres.

Håber at der er nogen der kan hjælpe.
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:02 #2
Det er jo tydeligt, at værdien 7,3 ikke er en int, så selvfølgelig vil en konvertering gå galt.

Du har et problem, når du skriver:

  Set @Temp_Kategori_ID = @Kategori_ID

da disse to jo ikke er af samme type. Nu ved jeg ikke, hvilken type Kategori_ID feltet fra tabellen tbl_Menu er, men den er jo nok en varchar.

Mit bud er derfor, at dit problem ligger i linjen

  Fetch Next From cSelect Into @Kategori_ID

hvor du forsøger at ligge en varchar med værdien \"7,3\" ind i en int. Hvorfor du så vil lægge den i en int aner jeg ikke, men prøv at ændre:

  Declare @Kategori_ID Int

til

  Declare @Kategori_ID varchar(50)

Ellers spørg igen og husk at fortælle, hvordan din tbl_Menu ser ud.
Avatar billede thrakrath Nybegynder
08. oktober 2001 - 20:11 #3
Undskyld - datatypen Kategori_ID fra tabellen tbl_Menu er en integer.

Jeg har forsøgt at angive @Kategori_ID som en Varchar men stadig det samme resultat.

Desuden har jeg forsøgt at Caste @Kategori_ID til en varchar ved at skrive:

Set @Temp_Kategori_ID = @Temp_Kategori_ID + \', \' + Cast(@Kategori_ID As Varchar(50))

Men lige lidt lykkes det.
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:27 #4
Hvad er @Temp_Kategori_ID2 for en??
Avatar billede thrakrath Nybegynder
08. oktober 2001 - 20:33 #5
@Temp_Kategori_ID2 er i virkeligheden @Temp_Kategori_ID - den er bare gået undercover ;)

Nej - det er en tastefejl fra min side.
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:33 #6
Hej igen,

har fundet ud af, hvad dit problem er:

Denne linje:

  Set @Temp_Kategori_ID = @Temp_Kategori_ID + \', \' + @Kategori_ID

Skal ændres til:

Set @Temp_Kategori_ID = @Temp_Kategori_ID + \',\' + CONVERT(varchar(50), @Kategori_ID)

Problemet er, at du forsøger at bruge + operatoren på en varchar og en int. MS SQL vil derfor helst bruge int, men eftersom din @Temp_Kategori_ID er kommet til at indeholde strengen \"7,3\" forsøger den at plusse 7,3 og f.eks. 5. Og det kan den jo ikke, fordi den ikke kan konvertere 7,3 til en int!



Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:33 #7
Hehe - humor mangler du i hvert fald ikke! ;-)
Avatar billede thrakrath Nybegynder
08. oktober 2001 - 20:39 #8
Jo tak - der opstår stadig den samme fejl - jeg har også forsøgt med Cast. . Fejlen opstår i denne linie:

Select * From tbl_Kategori Where Kategori_Sub_ID in (@Temp_Kategori_ID)
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:47 #9
Ok, nu ved jeg, hvad du vil!

Du vil noget i denne stil:

  Select * From tbl_Kategori Where Kategori_Sub_ID in (7, 3, 5, 8)

Det kan du ikke med en variabel....!

I stedet skal du lave en variabel mere i denne stil:

Declare @Temp2 varchar(255)

og i stedet for:

  Select * From tbl_Kategori Where Kategori_Sub_ID in (@Temp_Kategori_ID)

skrive:

  set @Temp = \'Select * From tbl_Kategori Where Kategori_Sub_ID in (\' + @Temp_Kategori_ID + \')\'
  exec (@Temp)

Så skulle der være gevinst!

Avatar billede thrakrath Nybegynder
08. oktober 2001 - 20:55 #10
Nej desværre - jeg får fejlen:
Syntax error converting the varchar value \'Select * From tbl_Kategori Where Kategori_Sub_ID in (\' to a column of data type int.

Og jeg har fulgt dine anvisninger:

Declare @Temp varchar(255)
set @Temp = \'Select * From tbl_Kategori Where Kategori_Sub_ID in (\' + @Temp_Kategori_ID + \')\'
  exec (@Temp)
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 20:58 #11
Er du sikker på, at du ikke i mellemtiden er kommet til at lave din @Temp_Kategori_ID om til en int? For i dit første spørgsmål står den jo som en varchar(50)

??
Avatar billede thrakrath Nybegynder
08. oktober 2001 - 21:00 #12
Nej - men jeg lavede en anden ændring - men nu virker det.
Mange tak for hjælpen ;)
Avatar billede torbenkoch Nybegynder
08. oktober 2001 - 21:01 #13
Ok! Hvilken ændring?? Er lidt nysgerrig!
Avatar billede thrakrath Nybegynder
08. oktober 2001 - 21:11 #14
@Temp_Kategori_ID hedder rent faktisk @Temp_Kategori_ID2 i min kode, fordi at jeg anvender @Temp_Kategori_ID andensteds.

Så jeg klippe/klistrede dit eksempel ind i koden:
set @Temp = \'Select * From tbl_Kategori Where Kategori_Sub_ID in (\' + @Temp_Kategori_ID + \')\'

Også var balladen der.

Jeg ændrede så @Temp_Kategori_ID til @Temp_Kategori_ID2 da denne indeholdte værdierne, også virkede det.

Så endnu gang - mange tak :)
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