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

Actualizar y borrar articulos en cascadas con TSQL

Estas en el tema de Actualizar y borrar articulos en cascadas con TSQL en el foro de SQL Server en Foros del Web. Hola a todos, tengo que hacer triggers para lograr lo mismo que las cascadas, es decir quitar esta funcion a las FK y hacerlo yo, ...
  #1 (permalink)  
Antiguo 03/08/2011, 14:17
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Actualizar y borrar articulos en cascadas con TSQL

Hola a todos, tengo que hacer triggers para lograr lo mismo que las cascadas, es decir quitar esta funcion a las FK y hacerlo yo, pero no tengo ni idea de por donde empezar en la parte del borrado, la parte de actualizacion la tengo mas o menos clara. Explico mas claro con un ejemplo:

Tabla1
.....| idtabla1 | Descrip | ....

Tabla2

......| idtabla2 | Descrip | .....

Tabla3

......| idtabla3 | Descrip | .....

y tengo definidas FK_idtabla2_idtabla1 en Tabla2 y FK_idtabla3_idtabla2 en Tabla3. Si tengo que actualizar idtabla1 no pasa nada porque simulo la cascada con TSQL en un trigger, desabilito FK_idtabla2_idtabla1 y cambio en Tabla1 y Tabla2 idtabla1 e idtabla2 y todas las idtablaX que tengan ese valor en FK_idtablaX. La cosa se complica cuando borro en Tabla1 articulos puesto que debo borrar en Tabla2 los articulos con llave FK_idtabla2_idtabla1 y aunque no tienen FK directa en Tabla1 tengo que borrar tambien los articulos en Tabla3 que tienen FK_idtabla3_idtabla2. Para las actualizacion use una serie de inner join entre tablas como sys_foreing_keys, sys_column , etc usando EXEC con cadenas de caracteres formadas para realizar las "cascadas" pero en el caso del borrado no tengo ni idea de como buscar todas las "ramas" o "dependencias" que se "cuelguen" desde Tabla1. Por supuesto estarian involucradas en esto unas 60 tablas Espero haber sido claro y sobre todo no muy aburrido con el tamaño de este mensaje. Gracias.
  #2 (permalink)  
Antiguo 03/08/2011, 14:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

ON DELETE CASCADE is by far the quickest and the most direct solution. And if you don't want it to be permanent, why don't you have some T-SQL code that will switch this option on and off like here

remove the original Tbl_A_MyFK constraint (without the ON DELETE CASCADE)

ALTER TABLE Tbl_A DROP CONSTRAINT Tbl_A_MyFK

set the constraint Tbl_A_MyFK with the ON DELETE CASCADE

ALTER TABLE Tbl_A ADD CONSTRAINT Tbl_A_MyFK FOREIGN KEY (MyFK) REFERENCES Tbl_B(Column) ON DELETE CASCADE

Here you can do your delete

DELETE FROM Tbl_A WHERE ...

drop your constraint Tbl_A_MyFK

ALTER TABLE Tbl_A DROP CONSTRAINT Tbl_A_MyFK

set the constraint Tbl_A_MyFK without the ON DELETE CASCADE

ALTER TABLE Tbl_A ADD CONSTRAINT Tbl_A_MyFK FOREIGN KEY (MyFK) REFERENCES (Tbl_B)

Reference http://stackoverflow.com/questions/1...property-on-my


Regards,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/08/2011, 14:53
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

Lo primero es que entendi perfectamente tu respuesta en ingles pero tengo que seguir escribiendo en español pues tengo una C-- en ingles. Estoy de acuerdo contigo pero incluso en el caso que use esa solucion lo que me interesa saber es en mas de 60 tablas quien tiene llave foranea y en donde para poder hacer lo que me propones y es ahí donde tengo el problema. Saludos y gracias.
  #4 (permalink)  
Antiguo 03/08/2011, 15:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

En pocas palabras, SQL Server ya tiene actualizacion en cascada, de acuerdo a sus llaves foranes (ON CASCADE), ¿para que quieres hacerlo manualmente?
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 04/08/2011, 00:54
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

En realidad el ejemplo que puse fue muy sencillo, explico un poco mas. Los analistas que diseñaron y crearon la BBDD definieron en varios casos que una misma tabla tuviera FKs distintas y que hacen referencia a una misma tabla principal, es algo asi:

Tabla1
campo1,campo2, campo3, .....

Tabla2
campo1, campo2,......

FK_tabla1_campo1_tabla2_campo1, FK_tabla1_campo3_tabla2_campo1

y sql2008 te permite definir las cascadas para una sola FK y como esto puede suceder en varias tablas pues han desidido desabilitar todas las cascadas y me han dado a mi la tarea de que las sustituya mediante tsql y triggers. El problema que tengo es que no encuentro la forma con codigo o SELECTs de "pintar" todo el arbol y sus ramas para el caso del DELETE de registros con claves ajenas. En conclusion "donde manda capitan no manda soldado". Gracias y saludos.
  #6 (permalink)  
Antiguo 04/08/2011, 04:38
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

Sus opiniones me han servido para que los "que saben" definan las cascadas en todos los casos excepto en algunos muy puntuales, doy pues por terminado el tema, muchas gracias a todos.
  #7 (permalink)  
Antiguo 04/08/2011, 07:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Actualizar y borrar articulos en cascadas con TSQL

Si quieres saber las relaciones de una tabla asi como las dependencias y demas, porque no le das una checada a esta liga:

http://msdn.microsoft.com/en-us/library/ms186778.aspx

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: articulos, borrar, tabla
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 09:44.