För att undvika sådana fel kan du använda CASE
+ ISNUMERIC
för att hantera scenarier när du inte kan konvertera till int.
Ändra
CONVERT(INT, CONVERT(VARCHAR(12), a.value))
Till
CONVERT(INT,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
ELSE 0 END)
I grund och botten är detta att säga om du inte kan konvertera mig till int tilldela värdet 0 (i mitt exempel)
Alternativt kan du titta på den här artikeln om att skapa en anpassad funktion som kontrollerar om a.value
är nummer:http://www.tek-tips.com/faqs.cfm?fid=6423