Actualizar datos en Transact SQL
Update
Para la actualización de datos Transact SQL dispone de la sentencia UPDATE. La sentencia UPDATE permite la actualización de uno o varios registros de una única tabla. La sintaxis de la sentencia UPDATE es la siguiente
UPDATE <nombre_tabla> SET <campo1> = <valor1> {[,<campo2> = <valor2>,...,<campoN> = <valorN>]} [ WHERE <condicion>];
|
El siguiente ejemplo muestra el uso de UPDATE.
UPDATE CLIENTESSET NOMBRE = 'Devjoker',APELLIDO1 = 'Herrarte',APELLIDO2 = 'Sánchez'
WHERE CO_CLIENTE = 10 |
Un aspecto a tener en cuenta, sobre todo si has trabajado con ORACLE, es que SQL graba los cambios inmediatamente sin necesidad de hacer COMMIT. Por supuesto podemos gestionar nosostros las transacciones pero es algo que hay que hacer de forma explicita con la instruccion BEGIN TRAN y que se verá en capitulos posteriores de este tutorial.
Update INNER JOIN
En ocasiones queremos actaualizar los datos de una tabla con los datos de otra (muy común para desnormalizar un modelo de datos).
Habitualmente, usamos subconsultas para este proposito, pero Transact SQL permite la utilización de la sentencia UPDATE INNER JOIN.
UPDATE CLIENTESSET NOMBRE = FICHERO_CLIENTES.NOMBRE,APELLIDO1 = FICHERO_CLIENTES.APELLIDO1,APELLIDO2 = FICHERO_CLIENTES.APELLIDO2
FROM CLIENTESINNER JOIN FICHERO_CLIENTES ON FICHERO_CLIENTES.CO_CLIENTE = CLIENTES.CO_CLIENTE |
Clausula OUTPUT
A partir de la version de SQL Server 2005 disponemos de la clausula OUTPUT para recuperar los valores que hemos insertado. Al igual que en un trigger disponemos de las tablas lógicas INSERTED y DELETED.
Las columnas con prefijo DELETED reflejan el valor antes de que se complete la instrucción UPDATE o DELETE. Es decir, son una copia de los datos "antes" del cambio.
DELETED no se puede utilizar con la cláusula OUTPUT en la instrucción INSERT.
DECLARE
@FILAS_ACTUALIZADAS TABLE( CO_CLIENTE int , NOMBRE varchar(100), APELLIDO1 varchar(100), APELLIDO2 varchar(100))
UPDATE CLIENTESSET NOMBRE = 'Devjoker', APELLIDO1 = 'Herrarte', APELLIDO2 = 'Sánchez'OUTPUT DELETED.* INTO @FILAS_ACTUALIZADASWHERE CO_CLIENTE IN (10, 11, 12) SELECT * FROM @FILAS_ACTUALIZADAS
|
Las columnas con prefijo INSERTED reflejan el valor después de que se complete la instrucción UPDATE o INSERT, pero antes de que se ejecuten los desencadenadores. Es decir, son una copia de los datos "despues" del cambio.
INSERTED no se puede utilizar con la cláusula OUTPUT en la instrucción DELETE.
DECLARE @FILAS_ACTUALIZADAS TABLE( CO_CLIENTE int , NOMBRE varchar(100), APELLIDO1 varchar(100), APELLIDO2 varchar(100)) UPDATE CLIENTESSET NOMBRE = 'Devjoker', APELLIDO1 = 'Herrarte', APELLIDO2 = 'Sánchez'OUTPUT INSERTED.* INTO @FILAS_ACTUALIZADASWHERE CO_CLIENTE IN (10, 11, 12) SELECT * FROM @FILAS_ACTUALIZADAS
|