2016-05-13 2 views
1

Requête:Échec de la conversion valeur varchar à une erreur de type de données int dans VisualStudio

SELECT CAST(College_Year AS VARCHAR(10)), 
     Learner_Id, 
     Forename_1, 
     Surname, 
     sum(Possible_Duration) AS Possible_Duration, 
     sum(Present_Duration) AS Present_Duration, 
     CASE 
      WHEN sum(Present_Duration) = 0 THEN 0 
      ELSE sum(Present_Duration)/sum(Possible_Duration) 
     END AS Attendance 
FROM dbo.IM_AT_Attendance_vw 
WHERE Session_date >= 
    (SELECT ACYR_Start_Date 
    FROM dbo.ACYR 
    WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year) 
    AND Session_Date <= 
    (SELECT ACYR_End_Date 
    FROM dbo.ACYR 
    WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year) 
    AND Session_Date NOT IN 
    (SELECT Holiday_Date 
    FROM IM_EFC_Holidays) 
    AND Possible = 1 
    AND month(Session_Date) = month(DATEADD(mm, -1, GETDATE())) 
    AND Learner_ID = @Learner_ID 
GROUP BY College_Year, 
     Learner_Id, 
     Forename_1, 
     Surname 
ORDER BY Surname, 
     Attendance 

ci-dessus requête fonctionne très bien dans SSMS mais quand j'exercerai du studio visuel génère une erreur:

Conversion failed when converting varchar value '414084H' to datatype int.

I Je devine problème avec la colonne LearnerID - type de données varchar (12)

J'ai essayé CAST (Learner_ID AS INT) et CONVERT (INT, Learner_ID) mais n'aide pas ....

Toute aide est très appréciée.

Merci,

Ar

+1

S'il vous plaît ajouter plus de contexte à votre question – blackbishop

+0

@blackbishop - S'il vous plaît voir ci-dessus –

Répondre

1

Votre valeur LearnerID "414084H" contient une lettre à la fin. Par conséquent, il ne peut pas être converti en nombre entier.

Si le format est le même alyways vous pouvez sélectionner seulement les 6 premiers caractères de votre valeur dans la sélection, et ainsi la conversion réussira:

select SUBSTRING(LearnerID, 0, 6) 
+0

J'ai essayé cela mais toujours la requête donne la même erreur ... –

+1

Vous pouvez essayer de convertir la chaîne en int directement dans la procédure stockée. Donc: SELECT CAST (SUBSTRING (LearnerID, 0, 7) COMME INTEGER). Je viens de remarquer que vous devez envoyer un paramètre 7, pas 6, pour prendre tous les chiffres en considération. – Patricia

+0

Erreur: La conversion a échoué lors de la conversion de la valeur varchar '4B0446' en type de données int. –