none
CAMBIAR LAS CONSULTAS DE SQL SERVER A SQL ACCESS RRS feed

  • Pregunta

  • ESTIMADOS TENGO LAS SIGUIENTE CONSULTA Y ESTOY TRATANDO DE MEJORARLA, PERO NO FUNCIONA EN SQL ACCESS:

    ANTIGUO EN SQL SERVER 2008

    BEGIN SELECT DISTINCT PEP2 INTO CONDICION1 FROM REPORTE WHERE [Base Unica Certificaciones] = 'S/Factura' AND [Cl#doc] = 'WE' AND [Val/MScCO] > 10000 AND CONDICION = '1' UPDATE REPORTE SET CONDICION = '5' WHERE (PEP2) IN (SELECT PEP2 FROM CONDICION1) AND CONDICION = '1' END

    NUEVO EN SQL ACCESS 2013 WITH CTE AS ( SELECT PEP2 FROM REPORTE_ASIGNACION WHERE CONDICION= 'PARA ACTIVAR' GROUP BY PEP2 HAVING ([Val/MScCO]> 10000) UPDATE REPORTE_ASIGNACION SET CONDICION = 'MAYOR A 10000' FROM CTE INNER JOIN REPORTE ON (REPORTE_ASIGNACION .PEP2 = CTE.PEP2);


    El error que sale es: Instrucción de SQL no valida y se posiciona en el WITH. Tambien quisiera saber si estas dos consultas hacen exactamente lo mismo. Porque la primera es un poco mas larga pero la segunda lo hace mas rapido.


    Juan Pastor


    • Editado Juan Pastor martes, 6 de octubre de 2015 14:31
    martes, 6 de octubre de 2015 14:20

Todas las respuestas

  • El WITH se utiliza en SQL Server para introducir una Common Table Expression (CTE). Me temo que las CTEs no existen en Access, así que no puedes escribir la sentencia de esa manera.

    Dado que la CTE solo se referencia una única vez en el UPDATE, podrías probar a reescribirla como tabla derivada (una Select entre paréntesis), que creo que Access sí que la soporta. Sería algo aproximadamente parecido a lo siguiente, pero no creo que te funcione por las buenas, tendrás que pulirlo hasta que sea sintácticamente correcto:

    UPDATE REPORTE_ASIGNACION SET CONDICION = 'MAYOR A 10000' FROM (SELECT PEP2 FROM REPORTE_ASIGNACION WHERE CONDICION= 'PARA ACTIVAR' 
    GROUP BY PEP2 HAVING ([Val/MScCO]> 10000)) as TD 
    INNER JOIN REPORTE ON (REPORTE_ASIGNACION.PEP2 = TD.PEP2);

    En cuanto a que si las dos sentencias hacen lo mismo, fíjate en que no es posible. Incluso aunque el uso de la tabla auxiliar en la primera y la CTE en la segunda fuera equivalente, las dos consultas manejan campos distintos y meten valores distintos.

    miércoles, 7 de octubre de 2015 7:52