La extracción de información filtrada de una base de datos es el proceso fundamental en el análisis de datos. Sin embargo esa información almacenada pueden estar cambiando constantemente debido a que determinados registros cambian sus datos e incluso son borrados.
Esas actualizaciones y borrados de registros forman parte del mantenimiento y actualización de tablas de bases de datos, cuyos comandos en T-SQL veremos a continuación.
Este post forma parte del Tutorial básico de SQL Server cuyo índice completo puedes ver aquí: Tutorial básico de SQL Server
Actualización o modificación de registros
El comando que permite definir una modificación de determinados registros es UPDATE. Vamos a ejecutar ejemplos con esta instrucción, pero a diferencia de otros artículos de esta serie, vamos a empezar por el final; vamos a convocar la ayuda de Copilot para hacer un paso previo antes de la actualización o del borrado.
En anteriores artículos, en concreto en este post vimos como creábamos tres bases de datos con diversos métodos: "Primera", "Segunda" y "Tercera". Al mismo tiempo creamos en este post la misma tabla Clientes en cada una de esas tres bases de datos, también de diversas formas.
Utilicemos "Segunda" como una base de datos de seguridad o respaldo, pero antes vamos a ayudarnos de Copilot:
Proporcióname un script para cambiar el nombre de la base de datos "Segunda" por "Seguridad"
El resultado que nos propone es el siguiente ALTER DATABASE:

Si ejecutamos ese código es muy intuitivo: nos "Altera" o "modifica" la "base de datos" [segunda] "modificando" el "nombre" por [seguridad]
Al ejecutar puede arrojar un error, porque como también te puede haber advertido Copilot las conexiones a esa bases de datos deben estar cerradas. Para no complicarnos cerremos directamente todas las conexiones (también podríamos haber utilizado USE master):

Si ejecutamos de nuevo el script, tendremos en la pestaña Mensajes: "The database name 'Seguridad' has been set."
Y efectivamente si volvemos a realizar las conexiones, hemos cumplido el objetivo:

Este inciso que hemos realizado en la modificación de registros tiene como objetivo preservar los datos originales, buena práctica si no tenemos posibilidad de callback, para no perder datos en las operaciones que realicemos.
Tan solo nos falta copiar los datos de registros de la base de datos "Primera" a "Seguridad". Ni siquiera acudimos a Copilot, este es el sencillo script:
insert into Seguridad.dbo.Clientes
select *
from Primera.dbo.Clientes
go
select * from Seguridad.dbo.Clientes
El comando INSERT INTO ya lo hemos practicado, pero en esta ocasión no va a insertar unos datos específicos que hayamos indicado, sino que va a insertar en "Clientes" de "Seguridad" lo que le indicamos a continuación. Y lo que le estamos indicando es un simple SELECT de todos los registros de "Clientes" de "Primera".
El SELECT a continuación de GO, comprueba que la inserción haya sido correcta.

35 filas afectadas por el INSERT y 35 filas afectadas por el SELECT.

Pues ahora (por fin) vamos a actualizar registros.
Podemos acceder rápidamente a la sintaxis del comando con el botón derecho:

Recordemos actuar sobre la BBDD "Primera":
USE [Primera]
GO
UPDATE [dbo].[Clientes]
SET [Nombre] = <Nombre, varchar(50),>
,[Apellidos] = <Apellidos, varchar(70),>
,[Edad] = <Edad, int,>
,[Direccion] = <Direccion, varchar(100),>
,[Cuenta] = <Cuenta, bit,>
WHERE <Condiciones de búsqueda,,>
GO
Como se puede apreciar la palabra SET es la que asigna un valor a uno o varios campos dependiendo de una condición WHERE. Un ejemplo:
USE [Primera]
GO
SELECT * FROM Clientes
where Cuenta is null
GO
UPDATE [dbo].[Clientes]
SET [Cuenta] = 0
WHERE Cuenta is null
GO
En el ejemplo anterior pretendemos solucionar la incidencia de poner a 0 aquellos registros que tienen valor nulo. Si seleccionamos solamente la instrucción de SELECT y ejecutamos es un buen modo de asegurarnos que el resultado que vamos a modificar es el correcto. En este caso solo hay un registro.
Si a continuación seleccionamos el UPDATE CON LA MISMA CONDICIÓN y ejecutamos veremos una fila afectada, es decir un registro modificado.
Por eso es importante hacer el SELECT y si vemos correcto el resultado del WHERE, ejecutar el UPDATE; así nos aseguramos que vamos a hacer modificaciones correctas.
Otro caso: supongamos que ha pasado un año. Aunque el campo "Edad" no debe usarse de este modo en bases de datos, sino que debe usarse, por ejemplo, una fecha de nacimiento y después calcular la edad con una función, en este caso que estamos aprendiendo, vamos a modificarlo manualmente:
USE [Primera]
GO
select 'Hace un año'
go
SELECT * FROM Clientes
GO
UPDATE [dbo].[Clientes]
SET [Edad] = [Edad] + 1
GO
select 'Actualmente'
go
SELECT * FROM Clientes
GO
Evidentemente como en este caso la modificación afectaba a todos los registros hemos omitido la clausula WHERE. Vemos que hemos logrado nuestro objetivo:

Borrado de registros
Con la seguridad que nos da tener una BBDD "Seguridad", valga la redundancia 🫡, vamos a proceder al borrado de registros completos.
Botón derecho como hemos hecho anteriormente, pero para 'DELETE To':
USE [Primera]
GO
DELETE FROM [dbo].[Clientes]
WHERE <Condiciones de búsqueda,,>
GO
Igual que antes muy importante el WHERE.
Necesitamos borrar aquellos registros que no tengan cuenta pero además, aquellos que clientes cuyos nombres empiezan por "s" (nos caen mal)
El código sería:
USE [Primera]
GO
select * from Clientes
where Cuenta = 0 OR (nombre like 's%')
go
DELETE FROM [dbo].[Clientes]
WHERE Cuenta = 0 OR (nombre like 's%')
GO
select * from Clientes
go
select count(*) as RegistrosRestantes from Clientes
Y tenemos nuestro resultado:

Si finalmente queremos comprobar como han quedado nuestras bases de datos, muy fácil:
USE Primera
select * from Clientes
go
USE Seguridad
select * from Clientes
go
Es importante practicar jugando con las condiciones WHERE, porque siempre podemos "restaurar" la base de datos "Primera" a partir de la base de datos de respaldo "Seguridad" :
delete from Primera.dbo.Clientes
go
insert into Primera.dbo.Clientes
select * from Seguridad.dbo.Clientes
go
select count(*) RegistrosRestaurados from Primera.dbo.Clientes
De esta forma recuperamos todos los registros y podemos seguir practicando modificaciones y borrados.
¡Nos leemos en el próximo post!