Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Saber tabla afectada (https://www.clubdelphi.com/foros/showthread.php?t=78161)

Parsec 24-03-2012 19:33:46

Saber tabla afectada
 
Hola a tod@s,

me gustaría saber a que tablas afecta, de SQL Server, una modificación que he realizado en un programa. Me bastaría con saber la fecha de modificación última de las tablas.

Saludos

Casimiro Notevi 24-03-2012 20:22:16

Creo que no se entiende lo que preguntas.
¿Tablas a las que afecta algo que has modificado tú mismo? :confused:

Parsec 24-03-2012 22:08:02

Hola,

se trata de que yo modifico un dato de un campo de un formulario y quiero saber en que tabla se ha producido la modificación (a que tabla pertenece el campo). Por ejemplo modifico el nombre de un cliente y mirando las tablas de la BBDD en el SQLServer quisiera saber a cuantas tablas afecta esta modificación; había pensado buscar por la fecha de modificación de la tabla pero no se como encontrar esto.
He mirado en sys.objects pero en esta tabla solo aparece las tablas creadas (fecha de creación) no las modificadas.
Espero que haya quedado más claro.

Saludos

Casimiro Notevi 24-03-2012 22:55:49

Si modificas el nombre del cliente 125 (por ejemplo), tan sólo puede haber afectado al cliente 125, no puede existir ningún registro más al que haya afectado.
Me temo que sigo sin entenderlo.

oscarac 25-03-2012 07:36:47

me parece que el quiere saber cual es la tabla que sufre modificacion
lo que en tablas dbf se puede hacer fijandose en la fecha de la ultima modificacion

Casimiro Notevi 25-03-2012 11:15:09

Pero con DBF me parece recordar que cada tabla era un fichero separado, cosa que con una BD relacional no es así.
Tendrá que crear las tablas con un campo 'UltimaModificacion' que se actualice mediante un trigger, por ejemplo, cada vez que sea modificada, ejemplo:
Código SQL [-]
CREATE TRIGGER TRG_CLIENTES_BU FOR TBCLIENTES ACTIVEBEFORE UPDATE POSITION 0
as
begin
  new.FechaModificacion = 'now'; 
end ^

Parsec 25-03-2012 11:45:26

ya lo has entendido?, menos mal!!.

Las tablas ya están creadas, ¿no existe ningún campo que me informe de que su contenido ha sido cambiado?.

Gracias

ecfisa 25-03-2012 15:03:29

Hola Parsec.

Cita:

Empezado por Parsec (Mensaje 428414)
ya lo has entendido?, menos mal!!.

Las tablas ya están creadas, ¿no existe ningún campo que me informe de que su contenido ha sido cambiado?.

Bueno, siendo sincero, no estaba muy claro al principio... :)

No uso MS SQL Server pero buscando por arriba, encontré estos enlaces:
Saludos.

Parsec 25-03-2012 17:49:48

Gracias voy a pegarles una mirada.

Saludos

Parsec 25-03-2012 19:59:10

Ya lo tengo!!! A continuación detallo los pasos por si a alguien le puede interesar:

1º Como en SQLServer se pueden tener muchas BBDD, lo primero es averiguar el 'database_id', esto es el identificador de la BBDD donde vamos a realizar la búsqueda, hay que hacer el siguiente query y ejecutarlo
Cita:

Select * FROM sys.database
2º Averiguar las tablas modificadas obteniendo el número del objeto 'object_id', hay que hacer el siguiente query y ejecutarlo
Cita:

Select * FROM sys.dm_db_index_usage_stats WHERE database_id= identificador del select anterior ORDER BY last_user_update DESC
3º Por último obtener los nombres de las tablas afectadas por la modificación, hay que hacer el siguiente query y ejecutarlo tantas veces como tablas hayamos detectado en la consulta anterior
Cita:

Select * FROM sys.objects WHERE object.id= identificador obtenido en el segundo select.
Se puede hacer una consulta conjunta de los 3 pasos pero lo dejo así por claridad.

Saludos a tod@s


La franja horaria es GMT +2. Ahora son las 01:00:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi