Tengo dos bases de Datos: EXACTUS y CENTRAL
EXACTUS tiene en COLLATE Modern_Spanish_CI_AS
CENTRAL tiene en COLLATE SQL_Latin1_General_CP1_CI_AS, fue la jefa no yo.
La cosa es que necesito sacar en una sola query los datos para los creditos de los empleados de las dos bases.
Tengo la primer consulta para la base exactus:
Código SQL:
Ver original
SELECT DOC.DOCUMENTO, DOC.CLIENTE, DOC.NOMBRE_CLIENTE, LIN.ARTICULO, ART.DESCRIPCION, LIN.CANTIDAD, DOC.TOTAL_PAGAR, CLI.CATEGORIA_CLIENTE, PAG.CONDICION_PAGO, PAG.FORMA_PAGO, DOC.FCH_HORA_ANULA, DOC.FCH_HORA_COBRO, 'DLCAE' AS ESTACION, ART.CLASIFICACION_3 FROM DLCAE.CLIENTE CLI INNER JOIN DLCAE.DOCUMENTO_POS DOC ON CLI.CLIENTE = DOC.CLIENTE INNER JOIN DLCAE.DOC_POS_LINEA LIN ON DOC.DOCUMENTO = LIN.DOCUMENTO INNER JOIN DLCAE.ARTICULO ART ON LIN.ARTICULO = ART.ARTICULO INNER JOIN DLCAE.PAGO_POS PAG ON DOC.DOCUMENTO = PAG.DOCUMENTO AND DOC.TIPO = PAG.TIPO AND DOC.CAJA = PAG.CAJA WHERE (DOC.FCH_HORA_COBRO > CONVERT(DATETIME, '2016-08-01 00:00:00', 102)) AND (CLI.CATEGORIA_CLIENTE IN ('CCEM' ,'CCAC', 'EMP10', 'EMP7', 'CCEM')) AND (ART.CLASIFICACION_3 IN ('COMBUSTIBLES', 'LUBRICANTES'))
El resultado, es excelente. El problema es que al hacer un UNION ALL con la query de la segunda base, la cual tambien funciona bien:
Código SQL:
Ver original
UNION ALL SELECT DOC.DOCUMENTO, DOC.CLIENTE, DOC.NOMBRE_CLIENTE, LIN.ARTICULO, ART.DESCRIPCION, LIN.CANTIDAD, DOC.TOTAL_PAGAR, CLI.CATEGORIA_CLIENTE, PAG.CONDICION_PAGO, PAG.FORMA_PAGO, DOC.FCH_HORA_ANULA, DOC.FCH_HORA_COBRO, 'ACTIAPS' AS ESTACION, ART.CLASIFICACION_3 FROM CENTRAL.ACTIPETROL.CLIENTE CLI INNER JOIN CENTRAL.ACTIPETROL.DOCUMENTO_POS DOC ON CLI.CLIENTE = DOC.CLIENTE INNER JOIN CENTRAL.ACTIPETROL.DOC_POS_LINEA LIN ON DOC.DOCUMENTO = LIN.DOCUMENTO INNER JOIN CENTRAL.ACTIPETROL.ARTICULO ART ON LIN.ARTICULO = ART.ARTICULO INNER JOIN CENTRAL.ACTIPETROL.PAGO_POS PAG ON DOC.DOCUMENTO = PAG.DOCUMENTO AND DOC.TIPO = PAG.TIPO AND DOC.CAJA = PAG.CAJA WHERE (DOC.FCH_HORA_COBRO > CONVERT(DATETIME, '2016-08-01 00:00:00', 102)) AND (CLI.CATEGORIA_CLIENTE IN ('CCAC','EMP10','EMP7')) AND (ART.CLASIFICACION_3 IN ('400', '420')) AND (DOC.DOCUMENTO LIKE '%AP03%')
Me da error:
Msg 457, Level 16, State 1, Line 1
Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict.
Ok bien, comenze a poner el COLLATE a la segunda query, ya que es la que consulta en otra base:
Código SQL:
Ver original
SELECT DOC.DOCUMENTO, DOC.CLIENTE, DOC.NOMBRE_CLIENTE, LIN.ARTICULO, ART.DESCRIPCION, LIN.CANTIDAD, DOC.TOTAL_PAGAR, CLI.CATEGORIA_CLIENTE, PAG.CONDICION_PAGO, PAG.FORMA_PAGO, DOC.FCH_HORA_ANULA, DOC.FCH_HORA_COBRO, 'DLCAE' AS ESTACION, ART.CLASIFICACION_3 FROM DLCAE.CLIENTE CLI INNER JOIN DLCAE.DOCUMENTO_POS DOC ON CLI.CLIENTE = DOC.CLIENTE INNER JOIN DLCAE.DOC_POS_LINEA LIN ON DOC.DOCUMENTO = LIN.DOCUMENTO INNER JOIN DLCAE.ARTICULO ART ON LIN.ARTICULO = ART.ARTICULO INNER JOIN DLCAE.PAGO_POS PAG ON DOC.DOCUMENTO = PAG.DOCUMENTO AND DOC.TIPO = PAG.TIPO AND DOC.CAJA = PAG.CAJA WHERE (DOC.FCH_HORA_COBRO > CONVERT(DATETIME, '2016-08-01 00:00:00', 102)) AND (CLI.CATEGORIA_CLIENTE IN ('CCEM' ,'CCAC', 'EMP10', 'EMP7', 'CCEM')) AND (ART.CLASIFICACION_3 IN ('COMBUSTIBLES', 'LUBRICANTES')) UNION ALL SELECT DOC.DOCUMENTO COLLATE Modern_Spanish_CI_AS AS DOCUMENTO, DOC.CLIENTE COLLATE Modern_Spanish_CI_AS AS CLIENTE, DOC.NOMBRE_CLIENTE COLLATE Modern_Spanish_CI_AS AS NOMBRE_CLIENTE, LIN.ARTICULO COLLATE Modern_Spanish_CI_AS AS ARTICULO, ART.DESCRIPCION COLLATE Modern_Spanish_CI_AS AS DESCRIPCION, LIN.CANTIDAD, DOC.TOTAL_PAGAR, CLI.CATEGORIA_CLIENTE COLLATE Modern_Spanish_CI_AS AS CATEGORIA_CLIENTE, PAG.CONDICION_PAGO, PAG.FORMA_PAGO, DOC.FCH_HORA_ANULA, DOC.FCH_HORA_COBRO, 'ACTIAPS' COLLATE Modern_Spanish_CI_AS AS ESTACION, ART.CLASIFICACION_3 COLLATE Modern_Spanish_CI_AS AS CLASIFICACION_3 FROM CENTRAL.ACTIPETROL.CLIENTE CLI INNER JOIN CENTRAL.ACTIPETROL.DOCUMENTO_POS DOC ON CLI.CLIENTE COLLATE Modern_Spanish_CI_AS = DOC.CLIENTE INNER JOIN CENTRAL.ACTIPETROL.DOC_POS_LINEA LIN ON DOC.DOCUMENTO COLLATE Modern_Spanish_CI_AS = LIN.DOCUMENTO INNER JOIN CENTRAL.ACTIPETROL.ARTICULO ART ON LIN.ARTICULO COLLATE Modern_Spanish_CI_AS = ART.ARTICULO INNER JOIN CENTRAL.ACTIPETROL.PAGO_POS PAG ON DOC.DOCUMENTO COLLATE Modern_Spanish_CI_AS = PAG.DOCUMENTO AND DOC.TIPO COLLATE Modern_Spanish_CI_AS = PAG.TIPO AND DOC.CAJA COLLATE Modern_Spanish_CI_AS = PAG.CAJA WHERE (DOC.FCH_HORA_COBRO > CONVERT(DATETIME, '2016-02-01 00:00:00', 102)) AND (CLI.CATEGORIA_CLIENTE COLLATE Modern_Spanish_CI_AS IN ('CCAC','EMP10','EMP7')) AND (ART.CLASIFICACION_3 COLLATE Modern_Spanish_CI_AS IN ('400', '420')) AND (DOC.DOCUMENTO COLLATE Modern_Spanish_CI_AS LIKE '%AP03%')
Pero por mas que le ponga el COLLATE el error es el mismo
Otras cosas que he hecho:
1- Colocar el COLLATE Modern_Spanish_CI_AS tambien a la primera query.
2- Colocar el COLLATE SQL_Latin1_General_CP1_CI_AS a las dos.
3- Crear vistas de cada select y hacer el UNION ALL de las dos vistas.
4- Golpear mi PC
Nada a funcionado ustedes pueden decirme cual seria la forma correcta de usar ese UNION ALL entre las dos bases o si me es mas factible cambiar el COLLATE a una de mis bases (si es que es algo viable).
Cualquier sugerencia es bienvenida