none
SELECT * FROM OPENQUERY(MYSQL, SELECT IF) Error RRS feed

  • Pregunta

  • Hola,  necesito consultar campos de mysql en sql server y me salta error en los IF y no tengo idea del porqué. Probé la query en mysql y anda bien:

    SELECT * FROM OPENQUERY(MYSQL,
    'SELECT 
    protocolo.IDPROTOCOLO,
    protocolo.NROPROTOCOLO,
    protocolo.FECHACREACION,
    protocolo.IDVETERINARIA,
    veterinaria.RAZONSOCIAL,
    veterinaria.DIRECCION,
    veterinaria.IDLOCALIDAD,
    veterinaria.CUIT * 1,
    veterinaria.TELPRINCIPAL,
    protocolo.PRECIO,
    1 AS NROCAJA, 
    IF(veterinaria.IDTIPOIVA = '' OR veterinaria.IDTIPOIVA = NULL,IF(veterinaria.CUIT = '' OR veterinaria.CUIT = ''NULL'',1,3),veterinaria.IDTIPOIVA),
    0 AS pedido,
    DATE_FORMAT(NOW( ), "%H:%i:%S" ),
    DATE_FORMAT(NOW( ), "%H:%i:%S" ) as hora,
    0 AS DEB,
    0 AS CRED,
    1,
    4101001,
    IF (veterinaria.IDTIPOIVA = 3, ''A'',
    IF (veterinaria.IDTIPOIVA = 2 OR veterinaria.IDTIPOIVA = 1 OR veterinaria.IDTIPOIVA = 6 , ''B'',
    IF (veterinaria.IDTIPOIVA = 4, ''C'',
    IF(veterinaria.IDTIPOIVA = '' OR veterinaria.IDTIPOIVA = NULL,IF(veterinaria.CUIT = '' OR veterinaria.CUIT = NULL,''B'',''A''),''B''))))
    FROM protocolo
    LEFT JOIN veterinaria ON veterinaria.IDVETERINARIA = protocolo.IDVETERINARIA
    ')AS QRY

    Y el error en cuestión es  este:

    > [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]No se puede obtener la información de columna del proveedor OLE DB "MSDASQL" para el servidor vinculado "MYSQL". (7350)
      [01000] [Microsoft][SQL Server Native Client 11.0][SQL Server]El proveedor OLE DB "MSDASQL" del servidor vinculado "MYSQL" devolvió el mensaje "[MySQL][ODBC 5.1 Driver][mysqld-5.7.24-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),
      0 AS pedido,
      DATE_FORMAT(NOW( ), "%H:%i:%S" ),
      DATE_FORMAT(NOW( ), "%H:%i:' at line 13". (7412)

    jueves, 31 de diciembre de 2020 14:51

Respuestas

  • Sospecho que puede ser problema de comillas.

    Fíjate, por ejemplo, en esto:

    IF(veterinaria.IDTIPOIVA = ''

    Has puesto dos comillas simples. Pero esto está escrito dentro de una cadena más larga que a su vez está encerrada entre comillas simples. Por lo tanto, SQL Server traduce las dos comillas consecutivas en una única comilla. En consecuencia, lo que le llega a MySql es esto:

    IF(veterinaria.IDTIPOIVA = '

    y lógicamente eso produce un error de sintaxis.

    Se resuelve duplicando cada comilla, es decir, tendrías que escribir

    IF(veterinaria.IDTIPOIVA = ''''

    y lo mismo en todos los otros sitios donde uses comillas simples y no estén ya duplicadas (hay varios otros sitios donde las tienes bien, como por ejemplo ''B'').

    Por cierto, ten cuidado con esto:

    veterinaria.IDTIPOIVA = NULL

    Eso no funciona, siempre devolverá false, porque nada es igual a NULL, ni siquiera otro NULL. Tienes que usar "IS NULL" en lugar de "= NULL".

    • Propuesto como respuesta Javi Fernández F viernes, 1 de enero de 2021 9:18
    • Marcado como respuesta Nappa888 lunes, 4 de enero de 2021 12:23
    jueves, 31 de diciembre de 2020 17:55