Tablas "circulares"

17/02/2004 - 13:52 por Hernan Nieto | Informe spam
Hola:

Necesito su ayuda para desarrollar un desencadenante que carga una tabla de
auditoria. Pero quiero que esta tabla crezca hasta un limite, por ejemplo
10.000 registros. Una vez llegado a esta cantidad que los nuevos datos que
se cargan, se graben desde el principio de la tabla, sobreescribiendo los
datos mas viejos. Se puede hacer esto?. Tengo idea de como hacerlo, pero no
pude hasta ahora llevarlo a codigo.
Creo que la cosa la puedo encarcar controlando el valor del campo identidad,
si pasa de 10.000, busco el campo fecha mas viejo, y le hago un update, con
los mismos datos que grabe en el registro con el campo 10.001, y luego borro
este ultimo.

Dede ya, mcuhas gracias.

Saludos.

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
17/02/2004 - 13:55 | Informe spam
Bueno se me ocurre asi nomas (espero los tomatazos ;))

Es:

Primero generar una tabla temporal donde pondre con un Identity los valor a
insertar,

Bien luego dentro del Trigger hago un Select count(*) From Auditoria y luego
a la cantidad de Registroas maximos le resto ese count, dandome la cantidad
de registros a insertar si?

Bien entonces ahi hago el insert tomando los datos de la tabla temporal,
como este tiene el Identity vos ahi le pones el rango, suponete que la Dif
de da 100 vos le pones en el inser algo asi como

Insert into tabla_auditoria (campos)
Select campos From #tabla_temporal where campo_identty <= resto

Bien

luego yo borraria los N registros que necesito y los inserto con un Insert
donde Campo_identity > resto.

Es una forma nomas


Salu2
Maximiliano Damian Accotto
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Hernan Nieto" escribió en el mensaje
news:
Hola:

Necesito su ayuda para desarrollar un desencadenante que carga una tabla


de
auditoria. Pero quiero que esta tabla crezca hasta un limite, por ejemplo
10.000 registros. Una vez llegado a esta cantidad que los nuevos datos que
se cargan, se graben desde el principio de la tabla, sobreescribiendo los
datos mas viejos. Se puede hacer esto?. Tengo idea de como hacerlo, pero


no
pude hasta ahora llevarlo a codigo.
Creo que la cosa la puedo encarcar controlando el valor del campo


identidad,
si pasa de 10.000, busco el campo fecha mas viejo, y le hago un update,


con
los mismos datos que grabe en el registro con el campo 10.001, y luego


borro
este ultimo.

Dede ya, mcuhas gracias.

Saludos.








Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.581 / Virus Database: 368 - Release Date: 09/02/2004
Respuesta Responder a este mensaje
#2 Javier Loria
17/02/2004 - 17:35 | Informe spam
Hola Hernan:
Una opcion:
1) Crea la Tabla de Auditoria.
2) Llenala con los registros en blanco (los 10,000)
3) En una tabla de Control Tienes el Numero Actual de la Auditoria. (2
Columnas, una con el tipo del Valor que quieres guardar y la otra con el
entero).
4) En el trigger siempre haces un UPDATE, del Numero Actual y le sumas
1.
=ÞCLARE @Siguiente INT
Incrementa y Captura el Siguiente Numero de Auditoria
UPDATE Control
SET @Siguiente=Valor=(Valor+1)%10000
FROM Control
WHERE Numero='SiguienteAuditoria'
UPDATE Auditoria
SET .
WHERE Auditoria.Id=@Siguiente
== Este es un ejemplo de una sola fila, pero los triggers deben manejar
multiples filas, en ese caso debes aumentar el valor no en 1 sino en
COUNT(*) de la Tabla Inserted, y el Update debe usar alguno de los "trucos
de numeracion" de filas que se han dado en este foro (Insertando en una
Tabla Temporal con Identity o haciendo una comparacion con la misma tabla y
haciendo un COUNT() de las filas que son menores o iguales.
Este codigo tiene la ventaja que hace la auditoria MUY RAPIDA, mucho mas
que un INSERT, especialmente porque no se produciran repaginaciones.
Espero te sirva, saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Hernan Nieto escribio:
Hola:

Necesito su ayuda para desarrollar un desencadenante que carga una
tabla de auditoria. Pero quiero que esta tabla crezca hasta un
limite, por ejemplo
10.000 registros. Una vez llegado a esta cantidad que los nuevos
datos que se cargan, se graben desde el principio de la tabla,
sobreescribiendo los datos mas viejos. Se puede hacer esto?. Tengo
idea de como hacerlo, pero no pude hasta ahora llevarlo a codigo.
Creo que la cosa la puedo encarcar controlando el valor del campo
identidad, si pasa de 10.000, busco el campo fecha mas viejo, y le
hago un update, con los mismos datos que grabe en el registro con el
campo 10.001, y luego borro este ultimo.

Dede ya, mcuhas gracias.

Saludos.
Respuesta Responder a este mensaje
#3 AlejoR
17/02/2004 - 21:16 | Informe spam
Bueno, este es un ejemplo que tambien realiza lo mismo,mi caso es que el usuario de la aplicacion al cambiar su clave no puede ser igual a las ultimas n claves que haya tenido.

Guardo el numero de veces de cambios de clave del usuario, arranca en 1,
Pregunto si ese numero es igual al limite establecido, si si, lo pongo (reinicio) en 1, si no le voy sumando 1
Luego pregunto si existe la clave en el historial de claves, si existe la actualizo la clave mas antigua, sino la inserto.
Y guardo en que numero de clave quedo.

Como se cual va siendo la clave mas antigua...porque si llego al limite la reinicio a 1, de hay en adelante va actualizando.
Algo parecido a lo que ya pronomen.
Espero haberme explicado bien y no haber confundido mas!!!
Bye
Respuesta Responder a este mensaje
#4 Miguel Egea
17/02/2004 - 23:41 | Informe spam
Yo lo haría con un trigger de tipo instead of, este tipo de triggers te
permiten implementar esa funcionalidad, si usas identity el trigger
básicamente insertaría el/los registros y borraría el más antiguo.

Si necesitas un ejemplo concreto, podemos proporcionarlo.


Saludos
Miguel Egea
http://www.portalsql.com
SQL-Server MVP
"Hernan Nieto" escribió en el mensaje
news:
Hola:

Necesito su ayuda para desarrollar un desencadenante que carga una tabla


de
auditoria. Pero quiero que esta tabla crezca hasta un limite, por ejemplo
10.000 registros. Una vez llegado a esta cantidad que los nuevos datos que
se cargan, se graben desde el principio de la tabla, sobreescribiendo los
datos mas viejos. Se puede hacer esto?. Tengo idea de como hacerlo, pero


no
pude hasta ahora llevarlo a codigo.
Creo que la cosa la puedo encarcar controlando el valor del campo


identidad,
si pasa de 10.000, busco el campo fecha mas viejo, y le hago un update,


con
los mismos datos que grabe en el registro con el campo 10.001, y luego


borro
este ultimo.

Dede ya, mcuhas gracias.

Saludos.



Respuesta Responder a este mensaje
#5 Hernan Nieto
18/02/2004 - 12:50 | Informe spam
Gracias a todos por contestar, todas las respuestas son muy interesantes.
Miguel si no es molestia, podrias mandar el ejemplo asi lo veo?

Saludos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida