Forums Últimos mensajes - Powered by IBM
 
Tags Palabras claves

Desencadenadores

19/06/2007 - 18:12 por Miguel A. Torrellas | Informe spam
Haber si alguien me abre las ideas, pues ayer me pasé toda la tarde
intentando que fluyeran a mi cabeza y no lo conseguí y hoy no me quiero
meter en los mismos líos sin otro "desencadenador" en mi mente.

SQL Server 2000 sp4

Dadas dos tablas A y B en las que ambas tienen una columna code.

Intento crear un Trigger/Desencadenador, de forma que no me deje borrar
lineas de la tabla A si existe el valor de A.code en B.code.

Lo he conseguido sin mayores problemas si se trata de una sola linea
pero imposible para mi cuando se trata de varias lineas. Estoy jugando
con la tabla "Deleted" que es por donde creo que van los tiros.

Reconocido a cualquiera que me ilumine.

Saludos. Miguel A. Torrellas
 

Leer las respuestas

#1 Alejandro Mesa
19/06/2007 - 19:51 | Informe spam
Hola Miguel,

Por que mejor no usas una restriccion de clave foranea?

create table tableB (
code int not null primary key
)
go

create table tableA (
code int not null foreign key references tableB(code)
)
go

insert into tableB values(1)
insert into tableA values(1)
go

delete tableA
where code = 1
go

drop table tableA, tableB
go

Si persistes en usar un trigger entonces:

create trigger tr_tableA_del on tableA
for delete
as
if @@rowcount = 0 return

if exists (
select *
from deleted as d inner join tableB as b
on d.code = b.code
)
begin
raiserror('no se puede eliminar porque el codigo existe en tableB', 16, 1)
rollback transaction
end
go


AMB

"Miguel A. Torrellas" wrote:

Haber si alguien me abre las ideas, pues ayer me pasé toda la tarde
intentando que fluyeran a mi cabeza y no lo conseguí y hoy no me quiero
meter en los mismos líos sin otro "desencadenador" en mi mente.

SQL Server 2000 sp4

Dadas dos tablas A y B en las que ambas tienen una columna code.

Intento crear un Trigger/Desencadenador, de forma que no me deje borrar
lineas de la tabla A si existe el valor de A.code en B.code.

Lo he conseguido sin mayores problemas si se trata de una sola linea
pero imposible para mi cuando se trata de varias lineas. Estoy jugando
con la tabla "Deleted" que es por donde creo que van los tiros.

Reconocido a cualquiera que me ilumine.

Saludos. Miguel A. Torrellas

Preguntas similares