Imagen destacada de SQL Comandos

Qué es y para qué sirve SQL Update

Compartir

Descubre qué es y para qué sirve SQL Update, el comando de actualización usado en SQL Server para la actualización de valores.

Hace algún tiempo, tratamos por primera vez el lenguaje SQL a través del artículo Comandos útiles de Transact-SQL para la gestión de SQL Server, pero hemos querido volver a hablar sobre este apasionante tema y hemos pensado que la mejor forma de hacerlo es hablando de uno de los comandos más importantes, SQL Update, o mejor dicho Update, ya que el SQL lo añadimos para referirnos a que estamos hablando del comando de este lenguaje.

SQL Update nos da la posibilidad de hacer actualizaciones de tablas o vistas de manera más o menos automatizada, mandando un conjunto de valores a cambiarse de manera simultánea.

NOTA: La sintaxis e informaciones aquí expuestas están soportadas por SQL Server, Azure SQL Database, Azure SQL Managed Instance, pero hay otros productos relacionados con SQL Server como por ejemplo Azure Synapse Analytics, Analytics Platform System o el Almacenamiento en Microsoft Fabric que no se tratan en este caso por ser productos más específicos, en esos productos, pueden encontrarse variaciones de los comandos aquí mostrados.

NOTA: A lo largo de este artículo vamos a suponer que el lector posee una versión de SQL Server 2016 o superior, en caso de tener versiones anteriores (SQL Server 2014 o inferiores) es posible que deba hacer pequeñas adaptaciones del código.

 

Sintaxis básica de SQL Update:

La sintaxis básica de SQL Update la podemos representar de la siguiente manera:

UPDATE <Nombre_Tabla>
SET column1 = <valor_1>, <valor_2> = <valor_3>, …
WHERE <Condición>;

Que tal y como podemos ver tiene una estructura bastante simple, en la cual se dice la tabla que se quiere actualizar a través de <Nombre_Tabla>, los valores que se quieren aplicar “<valor_1>, <valor_2> = <valor_3>, …” mediante el uso de “SET” y en base a una condición evaluada mediante la cláusula “WHERE”. O, dicho de otra manera:

  • <Nombre_Tabla>: Sirve para especificar la tabla sobre la que se quiere actuar.
  • SET column1: Especifica cual va a ser la columna sobre la que se van a aplicar los nuevos valores, o sea, la actualización.
  • <valor_x>: Representa los valores con los que se va a operar, o sea, cuales son sustituidos y por quien se sustituyen.
  • WHERE <Condición>: Sirve para definir la condición a partir de la cual se va a seleccionar a quien se actualiza.

Y como ejemplo se podría realizar la siguiente consulta en la que estamos buscando un tripulante concreto para cambiar una serie de campos:

UPDATE Tripulantes
SET NombreTripulante = ‘James Tiberius Kirk’, Rango= ‘Capitan’
WHERE FederacionID = 01USS1701;

Pero con esta versión de la sintaxis no tenemos todas las opciones que podemos adoptar en la actualización de las tablas, y por eso, podemos tratar la…

 

Sintaxis extendida de SQL Update:

Esta es una sintaxis que engloba muchas más casuísticas y opciones dentro del mundo de SQL Update.

Aquí disponemos, en principio, de todas las opciones que vamos a poder necesitar cuando se trabaja con SQL Update en la actualización de tablas y de vistas dentro de SQL Server:

UPDATE  

[ TOP ( <expresion>) [ % ] ]  

{ { table_alias | <objecto> | rowset_function_limited  

 [ WITH ( <Sugerencia_de_tabla_limitada> [ …n ] ) ] 

| @table_variable     

SET 

{ <Nombre_Columna> = { <expresion>| DEFAULT | NULL } 

| { udt_column_name.{ { property_name = <expresion>

| <nombre_campo> = <expresión> } 

| <nombre_metodo> ( <argumento> [ ,…n ] ) 

| column_name { .WRITE ( expression , @Offset , @Length ) } 

| @variable = <expresion>

| @variable = column = <expresion>                      

| column_name {<operadores_compuestos>} <expresion>

| @variable {<operadores_compuestos>} <expresion>

| @variable = column {<operadores_compuestos>} <expresion>

} [ ,…n ]  

Vamos a echar un ojo a todas las secciones y opciones que nos proporciona el comando SQL Update par ver como podemos aprovechar al 100% todo su potencial.

  • WITH: Nos permite especificar el ámbito de la vista o la consulta, haciendo referencia al conjunto de resultados con los que va a tratar.
  • TOP <expresión> [ % ]: Permite especificar el porcentaje de filas que se deben actualizar con la ejecución del comando UPDATE. En ocasiones, en vez de porcentaje se utiliza un número, indicando de esta manera, el número de filas a actualizar. Cuando se usa TOP, se puede combinar con otras sentencias como INSERT, UPDATE o DELETE, pero estas no harán una ordenación, y además deberán usarse paréntesis para poder delimitar correctamente el alcance de estos.
  • table_alias: Nos permite especificar un alias para la cláusula UPDATE.
  • server_name: Identifica el servidor en el que se encuentra la tabla o la vista. Se suele usar en combinación con database_name y schema_name.
  • database_name: Indica el nombre de la base de datos a la que queremos operar.
  • schema_name: Indica el nombre del esquema al que pertenece la tabla o la vista con la que estamos operando desde el comando SQL UPDATE.
  • table_name: Es el nombre de la tabla sobre la que estamos realizando la actualización.
  • view_name: Es el nombre de la vista sobre la que estamos operando. La vista a la que se hace referencia debe permitir actualizaciones y debe hacer referencia exactamente a una tabla base de la cláusula FROM de la vista.
  • rowset_function_limited: Es la función OPENQUERY u OPENROWSET, y es dependiente de las funciones permitidas por el proveedor.
  • WITH (<Sugerencia_de_tabla_limitada>): Permite especificar una o varias sugerencias de tablas permitidas en una tabla de destino. No se permite el uso de NOLOCK, READUNCOMMITTED, NOEXPAND y otras expresiones similares.
  • @table_variable: Permite especificar una variable como origen de la tabla.
  • SET: Nos permite especificar la lista de nombres de variable o de columna que van a ser actualizados mediante el comando UPDATE.
  • column_name: Es la columna que contiene los datos que se cambiarán en la operación de UPDATE.
  • DEFAULT: Permite especificar que el valor predeterminado definido para la columna debe reemplazar al valor existente en esa columna. También puede utilizarse para cambiar la columna a NULL.
  • udt_column_name: El nombre “udt” indica que es una columna que contiene un tipo que ha sido definido por el usuario.
  • property_name | field_name: Es un miembro de datos público definido por el usuario o un miembro de propiedad pública general.
  • method_name(argument [ ,… n] ): Es un método público de tipo no estático udt_column_name que puede usar uno o varios argumentos.
  • WRITE: En este se especificará que se va a modificar una sección del valor de column_name.
  • @Offset: Este valor describe el punto inicial del que parte el valor almacenado en column_name. Es una posición de byte ordinal de base cero, no pudiendo ser negativo, y de tipo bigint. Si es NULL, la operación de actualización anexa no se tiene en cuenta. Así mismo, se devolverá error en caso de que sea mayor que la longitud de bytes del valor de column_name. Si @Offset + @Length excede el tamaño, el sistema normaliza el dato borrando el contenido hasta hacerlo coincidir con el tamaño máximo.
  • @Length: Es el valor que indica la longitud de la sección de la columna, a partir de @Offset, que se reemplaza por expresión. Tiene las mismas limitaciones de forma que @Offset. Si se define como un valor NULL, la operación de actualización eliminará todos los datos de @Offset hasta el final.

Además, siempre se debe tener en mente que se pueden usar los operadores compuestos para la evaluación de condiciones, siendo admitidos los siguientes:

  • += Sumar y asignar
  • -= Restar y asignar
  • *= Multiplicar y asignar
  • /= Dividir y asignar%= Módulo y asignar
  • &= AND bit a bit y asignar
  • ^= XOR bit a bit y asignar
  • |= OR bit a bit y asignar

Las condiciones anteriores, se evalúan en base a una expresión, que es un valor literal, una expresión o una instrucción de selección entre paréntesis que devuelve un solo valor. El valor devuelto por la expresión evaluada sustituirá al valor existente.

Algo que no hemos comentado hasta ahora, es que las expresiones comunes también se pueden utilizarse junto a las instrucciones SELECT, INSERT, DELETE y CREATE VIEW, pudiendo, como en tantas otras ocasiones concatenar comandos para multiplicar su potencia.

 

Riesgos del uso de SQL Update:

Es importante que tengamos cuidado al hacer uso de UPDATE, porque un mal uso puede ser bastante nocivo. En concreto, cuando estamos actualizando una tabla, mediante el uso del comando UPDATE, la cláusula WHERE es la encargada de especificar cuáles son los registros que deben ser actualizados, por lo que, si se omite la cláusula WHERE, SQL entenderá que se deben actualizar todos los registros de la tabla, perdiéndose por tanto todo el contenido de esta.

Por esta razón:

UPDATE Tripulantes
SET NombreTripulante = ‘James Tiberius Kirk’, Rango= ‘Capitan’
WHERE FederacionID = 01USS1701;

Es distinto de:

UPDATE Tripulantes
SET NombreTripulante = ‘James Tiberius Kirk’, Rango= ‘Capitan’;

En el primer caso, se buscará el ID asociado y se sustituirá “NombreTripulante” por “James Tiberius Kirk” y el “Rango” por “Capitan”, dejando el resto de los elementos de la tabla sin tocar, mientras que, en la segunda ejecución, se recorrerá toda la tabla cambiando todos los nombres de tripulante y rangos por los mismos datos.

 

Control de errores en SQL UPDATE:

Cuando se está trabajando con sentencias de SQL con capacidad de modificar los datos, como es el caso de SQL UPDATE, es posible que al lanzar una actualización en una o más filas se infrinja alguna restricción que tenga la tabla.

Si se diera un caso como este, SQL Server devolvería un error y haría un ROLLBACK, echando para atrás cualquier cambio que se estuviera produciendo, este es un mecanismo de protección que implementa el SGBD para evitar inconsistencias o corrupciones de los datos almacenados por la base de datos.

 

Seguridad y permisos de SQL UPDATE:

Para que se puedan ejecutar sentencia de UPDATE sobre una tabla, esta debe tener concedidos los permisos de UPDATE sobre dicha tabla, de lo contrario se impedirá hacer la actualización. Así mismo, en caso de usar la clausula WHERE necesitaremos dar permisos de SELECT.

Basándonos en esto, es posible que tengamos la tentación de proporcionar permisos de manera generosa a todos los usuarios, pero se debe mantener siempre en mente que, si bien, lo más importante es ser productivos, por lo que no se debe negar el acceso a estos permisos a quien realmente los necesite, se debe tener siempre en mente la importancia de la seguridad, por lo que se deberá dar estos privilegios solo a quien realmente los necesite.

El permiso de actualización de la máquina (UPDATE) se proporciona a roles predefinidos como:

  • Sysadmin.
  • db_owner.
  • db_datawriter.

Algunos roles especiales, pueden proporcionar el acceso a otros roles y usuarios, estos son:

  • sysadmin.
  • db_owner.
  • db_securityadmin.

Y con esto concluimos (de momento) este breve repaso a SQL Update, aunque os aseguro que dentro de un tiempo, cuando volvamos con SQL Server o con Transact-SQL (T-SQL) trataremos de nuevo con UPDATE, porque es uno de esos «indispensables».

 

Conclusiones:

A lo largo de este artículo hemos intentado contestar la pregunta ¿qué es y para qué sirve SQL Update?.

Y para ello hemos revisado sus ventajas, desventajas, problemas, seguridad, y sobre todo hemos presentado una explicación de su sintaxis junto con algún ejemplo de uso.

Esperamos que este pequeño repaso sirva como ayudarte a entender y aprender el lenguaje SQL para Microsoft SQL Server.

Para aquellos que quieran seguir aprendiendo sobre SQL y SQL Server, recomendamos visitar el siguiente enlace, donde podrán leer artículos relacionados con esta tecnología.

También puedes ampliar información consultando la documentación de Microsoft Learn.

¡Gracias por acompañarnos!

Categorías:Cloud y sistemas

Otros posts que te pueden interesar

23 de abril de 2024
Acompáñanos en este artículo en el que trataremos de ver cómo evaluar riesgos y amenazas en la pyme. Uno
20 de febrero de 2024
Acompáñanos en este artículo en el que trataremos uno de esos “pains” a los que se enfrenta toda pyme,
15 de febrero de 2024
Acompáñanos y descubre qué es y por qué necesitamos Disaster Recovery. La creciente dependencia de todas las organizaciones de

Rellena el formulario y nuestro equipo de Sales contactará contigo lo antes posible.

growth@jotelulu.com  |  +34 911 333 712  |  jotelulu.com 

Puedes darte de baja de estas comunicaciones en cualquier momento.  Consulta nuestra Política de privacidad.