Creación de un Trigger

16/06/2005 - 13:11 por Lirán Marino | Informe spam
Hola!

Estoy desarrollando mi estrategia de auditoría para las tablas de mi Base de
datos. Como la aplicación requiere que almacene los datos modificados,
estaba pensando almacenar en una unica tabla los valores iniciales y finales
de la operación. Si se trata de un INSERT, el valor inicial seria vacío, si
se trata de un UPDATE, existirían valores iniciales y finales, y si se trata
de DELETE, el final seria vacío. La estructura -simplificada con motivos de
esta pregunta- sería más o menos así:

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
TablaDeEventos
{idOperacion, idUsuario, Accion, Tabla, Fecha, Hora, ValorInicial,
ValorFinal}
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-

Para que esto funcione, prepararía un Trigger genérico (que añadiría a todas
mis tablas) y haría uso de las tablas "inserted" y "deleted" para recuperar
los datos. Mi pregunta entonces es, con miras de hacer este trigger
generico: cómo podría recorrer -programaticamente- las columnas de las
tablas "inserted" y "deleted", de modo que pueda crear una cadena delimitada
por comas que incluya dichos valores (Inicial o Final)?






Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda como
leer...

Preguntas similare

Leer las respuestas

#1 Maxi
16/06/2005 - 14:38 | Informe spam
Hola, recorrer y y hacer sql dinamico? no no no!! esto no es nada bueno mi
amigo. Te recomiendo un articulo para lo que estas pidiendo donde quizas te
pueda dar una manito

http://www.microsoft.com/spanish/ms...art168.asp


Salu2
Maxi


"Lirán Marino" <liran (.) marino (@) gmail (.) com> escribió en el mensaje
news:
Hola!

Estoy desarrollando mi estrategia de auditoría para las tablas de mi Base
de datos. Como la aplicación requiere que almacene los datos modificados,
estaba pensando almacenar en una unica tabla los valores iniciales y
finales de la operación. Si se trata de un INSERT, el valor inicial seria
vacío, si se trata de un UPDATE, existirían valores iniciales y finales, y
si se trata de DELETE, el final seria vacío. La estructura -simplificada
con motivos de esta pregunta- sería más o menos así:

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
TablaDeEventos
{idOperacion, idUsuario, Accion, Tabla, Fecha, Hora, ValorInicial,
ValorFinal}
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-

Para que esto funcione, prepararía un Trigger genérico (que añadiría a
todas mis tablas) y haría uso de las tablas "inserted" y "deleted" para
recuperar los datos. Mi pregunta entonces es, con miras de hacer este
trigger generico: cómo podría recorrer -programaticamente- las columnas de
las tablas "inserted" y "deleted", de modo que pueda crear una cadena
delimitada por comas que incluya dichos valores (Inicial o Final)?






Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda como
leer...

Respuesta Responder a este mensaje
#2 Lirán Marino
16/06/2005 - 16:58 | Informe spam
Maxi

Un muy buen artículo, si me permites la opinión! Me ha aclarado varios
puntos que tenía acerca del tema. Y es que si bien me manejo con comodidad
en el mundo de SQL, Access y ADO, el SQL Server es completamente nuevo para
mi (T-SQL incluido).

Mi intención era prever el caso de que cambie la estructura de la tabla. Si
se modifica, habría que modificar el Trigger. Por esto es que pensaba
recorrer las columnas de la tabla inserted y deleted para crear una cadena
que contega los valores.

Sin embargo, soy consciente que al programar en T-SQL estoy en un nivel mas
bajo que al trabajar con ADO, por lo que hay que ser mas cuidadoso y
planificador, porque se trabajan las tablas directamente.

Saludos!

Lirán

Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda como
leer...
"Maxi" escribió en el mensaje
news:
Hola, recorrer y y hacer sql dinamico? no no no!! esto no es nada bueno mi
amigo. Te recomiendo un articulo para lo que estas pidiendo donde quizas
te pueda dar una manito

http://www.microsoft.com/spanish/ms...art168.asp


Salu2
Maxi


"Lirán Marino" <liran (.) marino (@) gmail (.) com> escribió en el mensaje
news:
Hola!

Estoy desarrollando mi estrategia de auditoría para las tablas de mi Base
de datos. Como la aplicación requiere que almacene los datos modificados,
estaba pensando almacenar en una unica tabla los valores iniciales y
finales de la operación. Si se trata de un INSERT, el valor inicial seria
vacío, si se trata de un UPDATE, existirían valores iniciales y finales,
y si se trata de DELETE, el final seria vacío. La
estructura -simplificada con motivos de esta pregunta- sería más o menos
así:

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
TablaDeEventos
{idOperacion, idUsuario, Accion, Tabla, Fecha, Hora, ValorInicial,
ValorFinal}
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-

Para que esto funcione, prepararía un Trigger genérico (que añadiría a
todas mis tablas) y haría uso de las tablas "inserted" y "deleted" para
recuperar los datos. Mi pregunta entonces es, con miras de hacer este
trigger generico: cómo podría recorrer -programaticamente- las columnas
de las tablas "inserted" y "deleted", de modo que pueda crear una cadena
delimitada por comas que incluya dichos valores (Inicial o Final)?






Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda
como leer...





Respuesta Responder a este mensaje
#3 Maxi
16/06/2005 - 18:02 | Informe spam
Hola, gracias por haber leido y que te haya gustado el articulo :-)

La idea es que no pienses que el trigger funciona para cuando se cambia la
estructura, ya que hacer esto puede impactar en un desarrollo donde sea muy
lento o hasta este en peligro la seguridad :(

Tambien podrias usar el Select Into en lugar del insert into, pero antes
deberias borrar la tabla destino claro ;) Ahi te aseguras de que esten todos
los valores


Salu2
Maxi


"Lirán Marino" <liran (.) marino (@) gmail (.) com> escribió en el mensaje
news:
Maxi

Un muy buen artículo, si me permites la opinión! Me ha aclarado varios
puntos que tenía acerca del tema. Y es que si bien me manejo con comodidad
en el mundo de SQL, Access y ADO, el SQL Server es completamente nuevo
para mi (T-SQL incluido).

Mi intención era prever el caso de que cambie la estructura de la tabla.
Si se modifica, habría que modificar el Trigger. Por esto es que pensaba
recorrer las columnas de la tabla inserted y deleted para crear una cadena
que contega los valores.

Sin embargo, soy consciente que al programar en T-SQL estoy en un nivel
mas bajo que al trabajar con ADO, por lo que hay que ser mas cuidadoso y
planificador, porque se trabajan las tablas directamente.

Saludos!

Lirán

Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda como
leer...
"Maxi" escribió en el mensaje
news:
Hola, recorrer y y hacer sql dinamico? no no no!! esto no es nada bueno
mi amigo. Te recomiendo un articulo para lo que estas pidiendo donde
quizas te pueda dar una manito

http://www.microsoft.com/spanish/ms...art168.asp


Salu2
Maxi


"Lirán Marino" <liran (.) marino (@) gmail (.) com> escribió en el
mensaje news:
Hola!

Estoy desarrollando mi estrategia de auditoría para las tablas de mi
Base de datos. Como la aplicación requiere que almacene los datos
modificados, estaba pensando almacenar en una unica tabla los valores
iniciales y finales de la operación. Si se trata de un INSERT, el valor
inicial seria vacío, si se trata de un UPDATE, existirían valores
iniciales y finales, y si se trata de DELETE, el final seria vacío. La
estructura -simplificada con motivos de esta pregunta- sería más o menos
así:

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
TablaDeEventos
{idOperacion, idUsuario, Accion, Tabla, Fecha, Hora, ValorInicial,
ValorFinal}
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-

Para que esto funcione, prepararía un Trigger genérico (que añadiría a
todas mis tablas) y haría uso de las tablas "inserted" y "deleted" para
recuperar los datos. Mi pregunta entonces es, con miras de hacer este
trigger generico: cómo podría recorrer -programaticamente- las columnas
de las tablas "inserted" y "deleted", de modo que pueda crear una cadena
delimitada por comas que incluya dichos valores (Inicial o Final)?






Liran Marino
liran (.) marino (@) gmail (.) com
-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Este mensaje se proporciona "TAL COMO ESTA", sin garantias y no otorga
ningun
derecho

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
(Guía de netiquette del foro)
http://www.uyssoft.com/Netiquette/

-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
Las listas de News son como el Tetris, para la gente que aun recuerda
como leer...









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