Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/11/2006, 16:06
daniel00
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años, 2 meses
Puntos: 8
Que tal Mary.

Espero que le haya entendido a tu problema porque como que son muchas preguntas pero no muy concretas.

Tu problema es que quieres eliminar los registros de una tabla ( llamemos
tabla1) del día anterior y guardar el último registro también del día anterior.

Me refiero al día anterior porque el proceso al menos se tardará un segundo, ya que eliminar 86,400 (60X60X24) registros generados en un día no creo que lo haga en menos tiempo.

Para esto te recomiendo, que tabla1 tenga un campo Identity al que llamaremos IdRow, el cual nos ayudará a identificar el último registro del día.

La tabla2 de igual estructura que tabla1 tiene los últimos registros de todos los días.

Solo nos basamos en la fecha para no considerar la hora, de esta forma se consideran desde las 0 hrs hasta las 23:59:59. Para esto usamos la funcion CONVERT .

Necesitamos crear el siguiente SP, el cual realiza las tareas mencionadas.

Código:
CREATE PROC dbo.Sp_ProcesoDiario
AS
BEGIN
	DECLARE @lintUltimoRegistro int
	DECLARE @ldtFechaDiaAnterior datetime


	SET @ldtFechaDiaAnterior  = dateadd ( d, -1 , getdate() )
	-- Estoy supondiendo que tu tabla deba de tener in Campo Identity, es muy necesario.
		-- El campo se llama IdRow
	
	--Obtenemos el IdRow del último registro del día anterior. LAS fECHAS LAS MANEJAMOS EN YYYYMMDD
	SELECT @lintUltimoRegistro = Max(IdRow)	
	From tabla1 
	WHERE CONVERT (char(10), getdate() , 112) = CONVERT (char(10), @ldtFechaDiaAnterior , 112)


	-- Guadar último registro del día anterior. Tabla 1 tabla2 tienen la misma estructura.
	INSERT INTO tabla2 
	SELECT * FROM tabla1 
	WHERE IdRow = @lintUltimoRegistro 

	--Finalmente borramos el resto de registros (del día anterior) de Tabla1.
	DELETE FROM Tabla1 WHERE CONVERT (char(10), getdate() , 112) = CONVERT (char(10), @ldtFechaDiaAnterior , 112)


END
Ahora bien, el SP anterior lo tenemos que ejecutar todos los días a las 00:00:00, para esto hacemos lo siguiente(crearemos un Job):

En el Enterprice Manager de SQL Server en la seccion de Administración y finalmente Trabajos(job), creamos uno Nuevo.

En la ficha General: Nombre. Dar algun nombre de Id.
Propietario. Se recomienda que tenga rol de administrador.

En la ficha Pasos: Dar click en Nuevo.
Dar el Nombre del Paso.
En Tipo seleccionar Secuencia de Comando TRansact-SQL
Seleccionar la BD's.
En el campo Comando, escribir lo siguiente: EXEC dbo.Sp_ProcesoDiario
Y dar click en Aceptar.
En la Ficha Programaciones:
Dar click en Nueva programación.
Dar el Nombre.
Seleccionar Periódica.
Seleccionar Cambiar.
Seleccionar Sucede Diariamente.
Seleccionar Cada 1 Dias.
Sucede una vez a las 12:00:00 am
Dar click en Aceptar.
Dar click en Aceptar.
Dar click en Aceptar.

----------------------
Espero que te sirva todo esto.

Saludos.

P.D. Mi SQL server esta en español, espero que el tuyo también para que sea un poco más fácil.