Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

borrar los datos de 1 bd cada cierto tiempo?

Estas en el tema de borrar los datos de 1 bd cada cierto tiempo? en el foro de SQL Server en Foros del Web. Hola!!!...alguien me podria decir como puedo hacer esto: tengo una bd en SQL Sever 2000 en la cual se estan depositando ciertos datos cada segundo ...
  #1 (permalink)  
Antiguo 03/11/2006, 16:22
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
borrar los datos de 1 bd cada cierto tiempo?

Hola!!!...alguien me podria decir como puedo hacer esto: tengo una bd en SQL Sever 2000 en la cual se estan depositando ciertos datos cada segundo aproximadamente...pero necesito que solo los almacene por dia, es decir, que los guarde en mi tabla a partir de las 00:00:00 hasta las 23:59:59 del dia actual y q cuando este rango se haya cumplido borre todos los datos de la tabla y comience a guardar a aprtir de cero...se puede hacer esto...como???...de antemano gracias por la ayuda!!!
  #2 (permalink)  
Antiguo 03/11/2006, 18:28
Avatar de jose rayado  
Fecha de Ingreso: mayo-2005
Ubicación: Monterrey
Mensajes: 35
Antigüedad: 19 años
Puntos: 0
Hola no se si esto te ayude:
Pero si haces un job que se ejecute a la media noche, donde la sentencia sea

Delete from mitabla where Fecha < left(getdate(),12)

Saludos
  #3 (permalink)  
Antiguo 03/11/2006, 18:59
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 2 meses
Puntos: 76
Tambien puedes usar truncate table mitabla si deseas limpiarla completamente, este se ejecuta mas rapido que el Delete from mitabla, pero no creo que puedas condicionarla, por lo cual la limpiaria completamente.

Ventaja: Se ejecuta mas rapido.
Desventaja: No deja rasto en el log, por lo tanto si necesitas que quede rasto en el log de la base de datos, este no te servira.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #4 (permalink)  
Antiguo 06/11/2006, 10:15
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 7 meses
Puntos: 0
Hola!!!...gracias por las sugerencias...pero en ambos casos me podrian decir en q parte o como manejo las intrucciones que me recomiendan??...por otro lado tengo otara duda: yo necesito que en el momento 23:59:59 termine gurde ese ultimo registro...borre el historico del día...(hablamos de 15 mil datos x 6 columnas aproximadamente)...y el momento 00:00:00 ya haya borrado todos los del dia anterior y comience a grabar los del nuevo dia...se puede hacer esto...cuanto tardaria en borrar los registros?...necesito manejar mi bd de esta forma...alguien me habia sugerido utilizar tablas temporales y generar una rutina...que me sugieren??...y como lo hago??...algun ejemplo??...gracias!!!
  #5 (permalink)  
Antiguo 08/11/2006, 16:06
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:46.