Ayuda T-SQL, Mantener integridad referencial con trigger
Publicado por william (5 intervenciones) el 01/10/2020 14:24:12
Hola, buen día, estoy haciendo un disparador (trigger) con T-SQL (SQL Server 2017) para mantener la integridad referencial entre dos tablas, debido a que ambas tablas tienen un cliclo en sus claves externas, por lo que he decidido hacer con trigger el equivalente a la integridad referencial a la hora de insertar, modificar y eliminar los datos de una tabla. las tablas son las siguientes:
El trigger que estoy realizando es el siguiente:
Sucede que cuando intento modificar el campo 'nombre' en la tabla Alojamiento, con el objetivo de que se dispare el trigger y me modifique todas las filas en la tabla personal, me sale el siguiente error:
-----------------------------------
No se actualizó ninguna fila
Los datos de la fila 1 no se confirmaron.
Origen del error: .Net SQL Client Data Provider.
Mensaje de error: La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
Se terminó la instrucción.
-----------------------------------
He intentado modificar el código de la siguiente manera:
Con el mismo mensaje de error. Alguien me puede ayudar, no logro encontrar el error.
Saludos y buen día a todos
William
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
create table Alojamiento(
nombre varchar(30) not null primary key,
direccion varchar(40) not null,
telefono varchar(20) not null,
cant_habit int,
contacto int
);
create table Personal(
codigo int identity(1,1) not null primary key,
nombre varchar(30) not null,
direccion varchar(40) not null,
nif varchar(10) unique not null check (nif like '[0-9][a-z][A-Z]'),
nombre_alojam varchar(30) not null
);
alter table Alojamiento
add foreign key(contacto) references Personal(codigo)
on delete set null
on update cascade;
El trigger que estoy realizando es el siguiente:
1
2
3
4
5
6
7
8
9
create TRIGGER ModificarEnCascada ON Alojamiento
for UPDATE
AS
BEGIN
update Personal
set nombre_alojam=(select nombre from inserted)
where nombre_alojam=(select nombre from deleted)
END
GO
Sucede que cuando intento modificar el campo 'nombre' en la tabla Alojamiento, con el objetivo de que se dispare el trigger y me modifique todas las filas en la tabla personal, me sale el siguiente error:
-----------------------------------
No se actualizó ninguna fila
Los datos de la fila 1 no se confirmaron.
Origen del error: .Net SQL Client Data Provider.
Mensaje de error: La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
Se terminó la instrucción.
-----------------------------------
He intentado modificar el código de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create TRIGGER ModificarEnCascada ON Alojamiento
for UPDATE
AS
BEGIN
declare @i varchar(30);
declare @d varchar(30);
select @i=nombre from inserted;
select @d=nombre from deleted;
update Personal
set nombre_alojam=@i;
where nombre_alojam=@d;
END
GO
Con el mismo mensaje de error. Alguien me puede ayudar, no logro encontrar el error.
Saludos y buen día a todos
William
Valora esta pregunta


0