none
Actualizar un valor mediante un procedure y una tarea programada RRS feed

  • Pregunta

  • Buenas noches, como puedo hacer para actualizar todos los días un campo estado, que depende de un campo fecha, por ejemplo en mi campo fecha tiene el dato 27/06/2016 y mi campo estado tiene el valor 1 que significa activado, si mañana es 28/06/2016, el campo estado debería actualizarse a 2 que significa desactivado, en si todo depende del campo fecha, he estado haciendo esto, pero la verdad es que nose si esta bien o mal ya que me muestra error, por favor ayúdenme recién empiezo en esto, gracias.

    ALTER PROCEDURE Sp_ActuaCroPreFall 
    @fecha1 VARCHAR(10)
    AS
    SELECT @fecha1 =(CONVERT(VARCHAR(10), GETDATE(), 103))
    UPDATE ControlCroPrendas SET EstadoID=2
    WHERE CONVERT(VARCHAR(10),CAST(FLOOR(CAST(convert(datetime,FechaFin) + 1 AS FLOAT)) AS DATETIME),103)<=@fecha1
    

    lunes, 27 de junio de 2016 2:08

Respuestas

  • Oscar Perez 1234,

    No, no escoges el valor. La fecha de fin del cronograma está almacenada en el campo [FechaFin], ¿verdad?. Sobre esa fecha es que tienes que validar si excede al día de hoy para que actualices el valor del estado:

    Fíjate:

    WHERE
            DATEDIFF(DAY, FechaFin, GETDATE()) < 0 AND EstadoID = 1;

    La condición indica que se actualizará el estado cuando el valor de FechaFin del cronograma exceda a la fecha actual y mientras el estado sea 1.

    Prueba el procedimiento, actualiza el valor del campo [FechaFin] del cronograma al día de ayer y ejecuta el procedimiento, verás que cambia el estado a 2.

    lunes, 27 de junio de 2016 2:46

Todas las respuestas

  • Oscar Perez 1234,

    Tienes un hilo inconcluso con parte de la duda que expones ahora: BLOQUEAR EDICIONES DE ACUERDO A FECHAS LIMITES, te recomiendo cerrar el hilo si extiendes la pregunta en otra sección o insistir sobre el mismo hilo.

    A ver, la idea es que se actualice un valor cuando la fecha de fin sea posterior a la fecha del servidor, la consulta debería ser la siguiente:

    CREATE PROCEDURE dbo.ActualCroPreFall
    AS
    BEGIN
    	UPDATE	ControlCroPrendas 
    	SET
    			EstadoID = 2
    	WHERE
    			DATEDIFF(DAY, FechaFin, GETDATE()) < 0 AND EstadoID = 1;
    END

    Puedes programar una tarea, ¿qué edición de SQL Server ocupas?

    lunes, 27 de junio de 2016 2:17
  • Gracias Williams ya cerre el hilo, pero aun no logro entender se supone que yo escojo una fecha fin, que seria el 27/06/2016, se supone que el dia 28/06/2016 el valor del dia 27 debería estar en 2, eso es lo que yo quiero hacer mediante un procedure
    lunes, 27 de junio de 2016 2:29
  • Oscar Perez 1234,

    No, no escoges el valor. La fecha de fin del cronograma está almacenada en el campo [FechaFin], ¿verdad?. Sobre esa fecha es que tienes que validar si excede al día de hoy para que actualices el valor del estado:

    Fíjate:

    WHERE
            DATEDIFF(DAY, FechaFin, GETDATE()) < 0 AND EstadoID = 1;

    La condición indica que se actualizará el estado cuando el valor de FechaFin del cronograma exceda a la fecha actual y mientras el estado sea 1.

    Prueba el procedimiento, actualiza el valor del campo [FechaFin] del cronograma al día de ayer y ejecuta el procedimiento, verás que cambia el estado a 2.

    lunes, 27 de junio de 2016 2:46