En esta ocasión me gustaría dejarles un código que les ayude a cómo actualizar de forma automática un campo, a partir de otra tabla en SQL Server. Me gustaría darles un contexto del problema.
Existen dos tablas, llamadas Tabla 1 y Tabla 2 (Por supuesto que estos nombres son netamente referenciales). En la Tabla 1 existe el ID_1, el cuál es el Primary Key. En la tabla 2, existe también un campo llamado ID_1, sin embargo este es un Foreing Key haciendo referencia al ID de la Tabla 1. Ahora bien, lo que se busca es automatizar el completar el ID_1 de la tabla 2, es decir, que se autocomplete de forma automática. El siguiente código lo que propone es que a partir de los campos Nombre de ambas tablas podamos hacer un actualización automática.
Pues bien, la solución a esto es hacer un Trigger After Insert, tanto en la Tabla 1 como en la Tabla 2. En el bloque de After Insert se debe poner lo siguiente:
- update Tabla 2 set id_1 = (
- select id_1 from tabla1 where tabla1.Nombre = tabla2.Nombre)
- where id_1 is null;
--Creación de la tabla 1
create table tabla1(
id_1 int not null identity,
Nombre varchar (100),
Edad int
constraint PK_id_1 primary key (id_1)
);
--Creación de la tabla 2
create table tabla2(
id_2 int not null identity,
Nombre varchar(100),
Apellido varchar (100),
Direccion varchar (100),
id_1 int,
constraint PK_id_2 primary key (id_2),
constraint FK_id_1 foreign key (id_1) references tabla1(id_1)
);
--Insertar datos en la tabla 1
insert into tabla1 values
('Alejandro', 12),
('Raul',45),
('Carlos', 35),
('Miguel', 19);
--Insertar datos en la tabla 2
insert into tabla2 values
('Alejandro','Fernandez', 'Dirección 1',null),
('Carlos','Lleucún', 'Dirección 2',null),
('Roberto','Solar', 'Dirección 3',null)
;
--Creación de Trigger asociado a insertar datos en la tabla 2
create or alter trigger actualizar_id_1_tabla2
on tabla2
after insert
as
begin
update tabla2 set id_1 =
(select id_1 from tabla1 where tabla1.Nombre = tabla2.Nombre)
where id_1 is null;
end;
--Creación de Trigger asociado a insertar datos en la tabla 1
create or alter trigger actualizar_id_1_tabla2_desde_tabla1
on tabla1
after insert
as
begin
update tabla2 set id_1 =
(select id_1 from tabla1 where tabla1.Nombre = tabla2.Nombre)
where id_1 is null;
end;

