SQL - No se puede convertir un calor de Char a Money. La sintaxis del valor char no es correcta.

   
Vista:

No se puede convertir un calor de Char a Money. La sintaxis del valor char no es correcta.

Publicado por Rafa Palomo administrador@viapack.net (1 intervención) el 08/06/2015 14:24:36
Buenos días,

Gracias de antemano por la ayuda que me podáis facilitar.
Intento crear un sentencia SQL para generar un listado en A3erp y me da el siguinte error:

"No se puede convertir un calor de Char a Money. La sintaxis del valor char no es correcta."

Le ha dado mil vueltas y no soy capaz de encontrar donde tengo el fallo.
Os dejo el código por si podéis iluminarme:

SELECT Cabecera.Base, Cabecera.BaseMoneda, Cabecera.BasePor, Cabecera.BasePorMoneda,
Cabecera.TotPronto, Cabecera.TotProntoMoneda, Cabecera.TotRecFin, Cabecera.TotRecFinMoneda,
Cabecera.TotIva, Cabecera.TotIvaMoneda, Cabecera.TotRec, Cabecera.TotRecMoneda,
Cabecera.TotDoc, Cabecera.TotMoneda, Cabecera.BaseBruta, Cabecera.BaseBrutaMoneda,
Cabecera.TotIRPF, Cabecera.TotIRPFMoneda, Cabecera.TipoCont, Cabecera.Serie,
Cabecera.NumDoc, Cabecera.Fecha, Cabecera.CodMon,
Cabecera.TotPagosPorCuentaMon, Cabecera.TotPagosPorCuenta,
Cabecera.TotProvisionesMon, Cabecera.TotProvisiones,
Client.CodCli, Client.NomCli, Clientes.param1,
Cartera.fechacalc,
Monedas.AbrMoneda,
MP.AbrMoneda MPAbrMoneda,
[Cambio, float, 1] Cambio,
[Valorado, sysname, 'F'] Valorado,
[MonedaValor, sysname, 'F'] MonedaValor
FROM CabeFacV as Cabecera INNER JOIN cartera as cartera On ( Cabecera.numdoc = cartera.numdoc)
JOIN Clientes as clientes(NOLOCK) On ( Cabecera.CodCli = Clientes.CodCli)
JOIN Clientes as client(NOLOCK) On ( cartera.CodCli = Client.CodCli)
JOIN Cabefacv as cabfac(NOLOCK) On ( cartera.numdoc = cabfac.numdoc)
JOIN Monedas (NOLOCK) On ( Cabecera.CodMon = Monedas.CodMon)

LEFT OUTER JOIN TiposCon (NOLOCK)
ON tiposcon.tipocont = Cabecera.tipocont
LEFT OUTER JOIN DatosConfig (NOLOCK)
ON datosconfig.idmultiemp = tiposcon.idmultiemp
LEFT OUTER JOIN DatosEmp (NOLOCK)
ON datosemp.idmultiemp = tiposcon.idmultiemp

JOIN Monedas AS MP (NOLOCK) ON ( DatosConfig.CodMon = MP.CodMon)
WHERE Client.CodCli >= :CodIni
AND Client.CodCli <= :CodFin
AND Cabecera.Fecha >= :FecIni
AND Cabecera.Fecha <= :FecFin
AND [CondicionesListado,Sysname,1=1]
ORDER BY Cabecera.Fecha, Cabecera.numdoc

Saludos y gracias de nuevo.

Rafa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No se puede convertir un calor de Char a Money. La sintaxis del valor char no es correcta.

Publicado por Rafael (83 intervenciones) el 09/06/2015 10:14:46
Asi a bote pronto...

1. En ningun sitio de la consulta haces dicha conversion de forma explicita, por lo cual es una conversion implicita es decir que en algun momento estas igualando un par de campos de distinto tipo...

Ejemplo:
DatosConfig.CodMon = MP.CodMon

Podria ser que el primero fuese MONEY y el segundo CHAR, como sea aquel que es CHAR en la tabla (algun registro) tiene un valor con letras ejemplo "A", mismo que no se puede convertir a MONEY, de tal MODO que tu igualdad no es posible y marca error.

Me atreveria a decir que el error esta en algun JOIN

Soluciones:
1.a La mas lógica seria que ambos campos fuesen del mismo tipo uno Primary KEY de una tabla y otro el Foreign KEY de la otra...
1.b Los caprichos y malas practicas obligan a veces (y esta mal que eso ocurra por normalizacion) que un campo sea CHAR y otro MONEY... luego si este es el caso hay que forzar una conversion EXPLICITA, lo mas facil (que no lo mejor) es convertir el MONEY a CHAR, no obstante en tablas y consultas de muchos registros es mas demandante la consulta que con numeros...

2. Es imposible darte una solucion puntual al error por que no se muestra la estructura de BBDD...


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar