AnswerBun.com

Como actualizar un valor en sql server de forma automática llegada una fecha

Tengo una tabla llamada Cuota, la cual tiene una Fecha_vencimiento (de tipo Date) y un estado (de tipo varchar). Necesito que cuando llegue la fecha de vencimiento el estado cambie, de forma automática, de 'VALIDA' a 'VENCIDA'.

No se si tengo que hacerlo con un procedimiento almacenado o con un trigger; de ser con alguno de estos 2, ¿Cómo hago que se ejecute automáticamente llegada la fecha de vencimiento?.

2 Answers

Dada la descripción del problema que estás dando, te voy a responder lo que NO estás preguntando, pues este es el típico caso del problema xy.

Esto, porque si bien SQL Server tiene los mecanismos para realizar la tarea que buscas, realmente no hace falta complicar tanto las cosas si sigues el principio básico de no almacenar información derivada en las tablas.

Es decir, ya tienes la fecha de expiración y puedes averiguar en cualquier momento la fecha actual, con la función getdate(). Una simple comparación te dirá si una cuota está expirada o no.

Mantener almacenada, en otra columna, la misma información, pero de otra forma, por ejemplo, saber si está vencida o no, es redundante y suele ser una fuente de problemas por errores en la programación y/o configuración.

Dicho esto, con SQL server tampoco es necesario que escribas la regla que te dice el status del registro en cada consulta, ya que puedes tirar de las columnas calculadas.

Por ejemplo, mira la sentencia de creación de esta tabla:

create table DatosExpiran (
    id                 bigint not null identity primary key
  , FechaExpiracion    datetime not null
  , compEstaExpirado   as case when FechaExpiracion < getdate() then 0 else 1 end
  , compEstadoActual   as case when FechaExpiracion < getdate() then 'VENCIDO' else 'VIGENTE' end
);

Si insertamos estos valores:

insert into DatosExpiran (FechaExpiracion) 
values ('20200101 17:12:14')
     , ('20211231 11:14:12')
     , (dateadd(ss, 60, getdate()));

Al ejecutar esta consulta:

select *, getdate() FechaActual
  from DatosExpiran;

Obtengo, al inicio, estos valores:

id                   FechaExpiracion         compEstaExpirado compEstadoActual FechaActual
-------------------- ----------------------- ---------------- ---------------- -----------------------
1                    2020-01-01 17:12:14.000 0                VENCIDO          2020-07-23 22:13:39.583
2                    2021-12-31 11:14:12.000 1                VIGENTE          2020-07-23 22:13:39.583
3                    2020-07-23 22:14:14.600 1                VIGENTE          2020-07-23 22:13:39.583

(3 rows affected)

Pero poco más de 1 minuto después, obtengo esto:

id                   FechaExpiracion         compEstaExpirado compEstadoActual FechaActual
-------------------- ----------------------- ---------------- ---------------- -----------------------
1                    2020-01-01 17:12:14.000 0                VENCIDO          2020-07-23 22:15:19.107
2                    2021-12-31 11:14:12.000 1                VIGENTE          2020-07-23 22:15:19.107
3                    2020-07-23 22:14:14.600 0                VENCIDO          2020-07-23 22:15:19.107

(3 rows affected)

Como puedes observar, la última fila ha vencido de manera automática al llegar la fecha/hora de vencimiento sin la necesidad de hacer nada más que el diseño de la tabla con columnas calculadas.

Answered by jachguate on December 4, 2021

Esto lo puedes lograr con el Agente de SQL Server, sin embargo deberás validar que tienes acceso a este o que tu versión del SQL Server lo tiene o soporta. Puedes ver algunos ejemplos en la página de Microsoft.

Answered by Jonnathan Q on December 4, 2021

Add your own answers!

Related Questions

Validar una palabra completa con regex

1  Asked on November 13, 2021 by angel-judath-alvarez

   

Obtener RadioButton marcado a traves de json y modal

1  Asked on November 13, 2021 by karli

   

¿Como calcular los valores de varios checkbox con un botón calcular en js?

1  Asked on November 13, 2021 by alejandro-ramrez-sandoval

     

Validar DatePicker Jquery BootstrapValidator

1  Asked on November 13, 2021 by cris19n

   

PHP como agregar funcion add_action en una tabla

1  Asked on November 13, 2021 by oscar-rios

       

HTTP ERROR 503 – Ubuntu 18.04 — AllowOverride All

2  Asked on November 13, 2021 by principe-mestizo

     

Cómo abrir otra pestaña en Angular?

1  Asked on November 13, 2021 by user177181

 

setState no se actualiza con react-hook-form

0  Asked on November 13, 2021 by paulo-urbano-rivera

     

Inner join en php

1  Asked on November 12, 2021 by vikingo22

   

Simular un juego por turnos – penales – en Python

1  Asked on November 10, 2021 by nicolas-osorio-bustos

   

Diferencia entre exec() y exec_()

1  Asked on November 10, 2021 by xhighvoltagex

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved.