Actualizar fila de tabla con valores de otra fila

Problema muy común en la práctica es a veces querer actualizar registros con valores contenidos en otros registros, total o parcialmente. Vamos a ver un ejemplo para entender lo sencillo que es según queramos actualizar columnas con valor, solo las que tengan valor NULL, etc.

CREATE TABLE [dbo].[Employee](
[Title] [varchar](50) NULL,
[FirstName] [varchar](50) NULL,
[Surname] [varchar](50) NULL,
[DOB] [varchar](50) NULL,
[Datestarted] [varchar](50) NULL,
[EmployeeId] [int]  NOT NULL,
[Interest] [varchar](50) NULL,
[EmpAddress] [varchar](500) NULL
) ON [PRIMARY]
GO

insert Employee values
('Mr.','Jo','Lo','11/11/1983',NULL,1,'Movie','Malaga'),
('Mrs.','Aali','Mo','2/3/1987',NULL,2,'Game','SFO'),
('Mr.','Abu','Dana','5/5/2000',NULL,3,'Movie','Iowa'),
('Smt.','Woody','Allen','1/1/2003',NULL,4,NULL,'NY'),
('Miss','Julie','Andrews','4/6/1988',NULL,5,NULL,NULL)

Hemos creado la tabla e insertado 5 registros. Ahora supongamos que queremos actualizar la fila 1 con los valores de la fila 2 (solo algunos campos, aunque podríamos hacer lo mismo con mas campos o incluso todos):
UPDATE n
SET n.EmpAddress = p.EmpAddress,n.[Interest] = p.Interest
FROM [Employee] n inner join [Employee] p
ON n.employeeid = 1 AND p.employeeid = 2
GO



Si quisiéramos actualizar solo los valores NULL, dejando intactos los campos con algún valor, podríamos usar esta sentencia:
UPDATE n
SET n.EmpAddress = coalesce(n.EmpAddress, p.EmpAddress),n.[Interest] = coalesce(n.Interest, p.Interest)
FROM [Employee] n inner join [Employee] p
ON n.employeeid = 4 AND p.employeeid = 3
GO

Aquí hemos podido actualizar en el registro 4 los valores del registro 3, pero solo si tenían un valor nulo:


Espero os haya servido este simple ejemplo para optimizar vuestros procesos de actualización, y no tengáis que inventaros "código de comprobación de campos a mano". Nos vemos.

No hay comentarios :

Publicar un comentario

Buscar en el Blog: