none
Error al ejecutar SP RRS feed

  • Pregunta

  • Buen dia,
    me pasa algo muy extraño, tengo creado un SP y de un momento a otro dejo de funcionar bien, es una consulta que tiene un ciclo con un While y me repite los mismos valores en todas las filas y columnas,
    pero si ejecuto la consulta fuera del SP me genera bien la tabla, a que se debe esto?
    CON SP:

    Sin SP:

    Sin SP la columna "Numero" y "Hora" se genera bien, en el SP se genera igual, y lo peor es que venia trabajando sin problema y un dia cualquiera empezo asi.

    Gracias.

    jueves, 26 de noviembre de 2020 21:08

Todas las respuestas

  • No sé si has intentado pegar una imagen debajo de "con sp" y "sin sp", pero no se ve nada en el mensaje final que aparece en el foro.

    Una razón por la que una consulta puede arrojar distintos resultados dentro y fuera de un procedimiento almacenado es que haga operaciones que dependan del orden en el que se obtienen los registros. Y ese orden puede variar debido a que el SP utilice un plan de ejecución distinto que el código ejecutado fuera del SP. Esto ocurre porque el SP memoriza el plan de ejecución que resultaba óptimo en el momento en el que se creó el procedimiento, pero con el tiempo el plan óptimo puede cambiar debido a la introducción de más datos en las tablas. La sentencia externa recalcula el plan mientras que el procedimiento no lo hace.

    Para evitar esto (que el procedimiento pierda el plan óptimo), conviene ejecutar periódicamente una recompilación de los SPs (hay varias formas de hacerlo, como por ejemplo llamar a sp_recompile).

    Pero el hecho de que los resultados salgan mal, suponiendo que la causa sea la que acabamos de describir, indicaría que al escribir el procedimiento se ha cometido el error de omitir el "order by" para forzar el orden de los datos y se ha confiado en el orden que salía por defecto. Al cambiar el plan, puede cambiar el orden, y claro, si se hacen cálculos secuenciales mediante un bucle, no se obtienen los resultados que se esperaban.

    jueves, 26 de noviembre de 2020 22:04
  • Este es con el SP

    Sin SP:

    No es que salgan en diferente orden, es que repite los elementos al ejecutar el SP y con la consulta solita no pasa, es muy raro, igual voy a intentar lo que me sugieres,

    Mil gracias.

    jueves, 26 de noviembre de 2020 22:47
  • Hola Sergio Montoya:

    Lo que indicas no es lógico.

     es una consulta que tiene un ciclo con un While

    Si tienes algún while, seguro que tienes alguna asignación de alguna variable, y por algún motivo no esta cambiando los valores.

    De cualquier manera, si has preguntado en el foro, es porque necesitas alguna orientación y para eso, deberías de pegar el código del procedure en la pregunta para poder intentar ayudarte.

    martes, 1 de diciembre de 2020 5:05