Necesitamos tu apoyo para compartir nuestros ensayos acerca de las ciencias informáticas.
Solución:
Para evitar tal error, puede usar CASE
+ ISNUMERIC
para manejar escenarios cuando no puede convertir a int.
Cambiar
CONVERT(INT, CONVERT(VARCHAR(12), a.value))
Para
CONVERT(INT,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
ELSE 0 END)
Básicamente, esto dice que si no puede convertirme a int, asigne un valor de 0 (en mi ejemplo)
Alternativamente, puede consultar este artículo sobre la creación de una función personalizada que verificará si a.value
es el número: http://www.tek-tips.com/faqs.cfm?fid=6423
Dado que solo estás convirtiendo a int
s para luego realizar una comparación, simplemente cambiaría la definición de la tabla para usar varchar
además:
Create table #myTempTable
(
num varchar(12)
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)
y eliminar todos los intentos CONVERT
s del resto de la consulta.
SELECT a.name, a.value AS value, COUNT(*) AS pocet
FROM
(SELECT item.name, value.value
FROM mdl_feedback AS feedback
INNER JOIN mdl_feedback_item AS item
ON feedback.id = item.feedback
INNER JOIN mdl_feedback_value AS value
ON item.id = value.item
WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
) AS a
INNER JOIN #myTempTable
on a.value = #myTempTable.num
GROUP BY a.name, a.value ORDER BY a.name
Si está convirtiendo un varchar a int, asegúrese de no tener decimales.
Por ejemplo, si está convirtiendo un campo varchar con valor (12345.0) en un número entero, obtendrá este error de conversión. En mi caso, tenía todos mis campos con .0 como terminación, así que usé la siguiente declaración para solucionar el problema globalmente.
CONVERT(int, replace(FIELD_NAME,'.0',''))
Si piensas que ha resultado de provecho este post, te agradeceríamos que lo compartas con otros juniors de esta forma nos ayudas a dar difusión a este contenido.