En este momento estoy trabajando en SQL Server 7.0 (soy aprendiz) y tengo una tabla que debe ganerarme un proceso al tercer día después de ingresados los datos y otro proceso al 11 día, me comentaron que con triggers o procedimientos almacenados era posible, pero no tengo idea de como funcionan, como los hago, etc, etc.
2 respuestas
Respuesta
1
1
Anónimo
En realidad lo que necesitas es combinar los procedimientos almacenados con el agente SQL, es decir, ¿conoces el agente? Te creas el procedimiento para lo cual te aconsejo que utilices los libros en pantalla de SQL que mire si los datos existen y desde cuando y si llevan el tiempo que tu quieres que haga el proceso que sea y, cuando esto funcione, te vas al SQL Agent y le programas un trabajo diario. Tienes que tener cuidado y programarlo cuando sepas que el servidor va a tener poca carga. En cuanto al ejemplo no se que enviarte... Tengo procedimientos muy sencillos que no te servirán de mucho y otros muy complicados que igual se sale de lo que tu necesitas... Dime que quieres hacer y te diré como, ¿vale?
Hola jordim Bueno, te explicare lo que estoy haciendo. En este momento estoy trabajando en una aplicación para el transito, en lo que tiene que ver con comparendos, la fecha del comparendo es la clave del asunto ya que si el comparendo es pagado antes del del tercer día paga el cincuenta por ciento y se genera una acta de no comparecencia y al 11 día si la persona no ha pagado se cobra el 200 por ciento de la multa y se genera una resolución sancionatoria. Este es el problema que me tiene bloqueado. Espero que me entiendas ahora si, gracias! Chao
Hola jordim Bueno, te explicare lo que estoy haciendo. En este momento estoy trabajando en una aplicación para el transito, en lo que tiene que ver con comparendos, la fecha del comparendo es la clave del asunto ya que si el comparendo es pagado antes del del tercer día paga el cincuenta por ciento y se genera una acta de no comparecencia y al 11 día si la persona no ha pagado se cobra el 200 por ciento de la multa y se genera una resolución sancionatoria. El otro problemilla es que se estarán grabando aproximadamente unos 3000 comparendos diarios la migración de los datos del sistema antiguo es de más o menos unos 2 millones de registros, no se si esto sea muy pesado ; ) Este es el problema que me tiene bloqueado. Espero que me entiendas ahora si, gracias! Chao
¿Lo primero (no te enfades pero soy español y me ha echo mucha gracia) que es un comparendo? ¿De dónde eres? Para lo que nos afecta no importa. Lo que debes hacer es un procedimiento almacenado que obtenga los datos que necesitas para crear el documento para todos los registros con fecha del día - el tiempo que quieras en tu caso 11 días. La verdad es que si no tienes experiencia con este tipo de procedimientos es bastante complicado. Te envío uno mio que mira si un tema de puntos están a 7 días de caducar y envía un mail al usuario recordandele que tiene que gastarlos (siento no tener nada más sencillo a mano). Una vez tengas el procedimiento lo programas en el SQLAgent con una tarea diaria. Aquí esta el procedimiento: CREATE PROCEDURE pcdCaducidadPuntos AS declare @dias int set @dias = 7 DECLARE registros SCROLL CURSOR FOR SELECT CUENTA.CUEREF, DATOSUSUARIO.DATNOMBRE, DATOSUSUARIO.DATAPELLIDO1, DATOSUSUARIO.DATEMAIL, CUENTA.CUEFECHACAD, CUENTA.CUEPUNTOS - CUENTA.CUEGASTADOS AS Puntos, EMPRESA.EMPNOMBRE FROM USUARIO INNER JOIN DATOSUSUARIO ON USUARIO.USUREF = DATOSUSUARIO.DATUSER INNER JOIN EMPRESA INNER JOIN DETALLECUENTA ON EMPRESA.EMPREF = DETALLECUENTA.DETEMPRESA INNER JOIN CUENTA ON DETALLECUENTA.DETCUENTA = CUENTA.CUEREF ON USUARIO.USUREF = CUENTA.CUEUSU WHERE (CUENTA.CUEPUB = '1') AND (DATOSUSUARIO.DATEMAIL <> '') AND (CUENTA.CUEFECHACAD < GETDATE() + @dias) AND CUECADMAIL = 0 UNION SELECT CUENTA.CUEREF, DATOSUSUARIO.DATNOMBRE, DATOSUSUARIO.DATAPELLIDO1, DATOSUSUARIO.DATEMAIL, CUENTA.CUEFECHACAD, CUENTA.CUEPUNTOS - CUENTA.CUEGASTADOS AS Puntos, 'SumayCompra.com' AS EMPNOMBRE FROM DATOSUSUARIO INNER JOIN USUARIO ON DATOSUSUARIO.DATUSER = USUARIO.USUREF INNER JOIN CUENTA ON USUARIO.USUREF = CUENTA.CUEUSU WHERE (DATOSUSUARIO.DATEMAIL <> '') AND (CUENTA.CUEFECHACAD < GETDATE() + @dias) AND (CUENTA.CUEPUB = '1') AND CUECADMAIL = 0 DECLARE @ref int, @nombre varchar(30), @apellido1 varchar(30), @email varchar(50), @caducidad datetime, @puntos int, @empresa varchar(100), @parametros varchar(1024) OPEN registros FETCH FIRST FROM registros INTO @ref, @nombre, @apellido1, @email, @caducidad, @puntos, @empresa WHILE NOT @@FETCH_STATUS = -1 BEGIN UPDATE cuenta set cuecadmail=1 where cueref=@ref set @parametros = @nombre + '|' + @apellido1 + '|' + cast(@puntos as VARCHAR(10)) + '|' + @empresa + '|' + cast(@caducidad as varchar(10)) print @parametros exec pcdEmailGenerico 'CADUC', @parametros, @email FETCH NEXT FROM registros INTO @ref, @nombre, @apellido1, @email, @caducidad, @puntos, @empresa END CLOSE registros DEALLOCATE registros RETURN No se si te servirá pero ya te digo que es un tanto complicado
Hola Jordim Bueno, tranquilo (también me cayo en gracia que no supieras que es un comparendo), mira yo soy de Colombia y los comparendos son los que se generan por infracciones de transito. Quería decirte que agradezco mucho el ejemplo, como dicen por acá echando a pique se aprende y pues voy a estar leyéndome unos cuantos manuales y cacharreando teniendo como base tu ejemplo. Como creo que me puedo demorar creo que pues es todo por ahora. De nuevo te agradezco mucho, y si algo me queda grande, no dudes que te consultare. Chao y gracias.