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!

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *