Cambiar datos con la cláusula SET

SET especifica las columnas que deben cambiarse y sus nuevos valores. Los valores de las columnas especificadas se actualizan con los valores indicados en SET, en todas las filas que coincidan con la condición de búsqueda de la cláusula WHERE.

En el ejemplo siguiente se cambia el valor del código postal en las filas que coinciden con una ciudad especificada.

USE AdventureWorks2008R2;
GO
UPDATE Person.Address
SET PostalCode = '98000'
WHERE City = 'Bothell';
GO

Si no se especifica una cláusula WHERE, se actualizan todas las filas. Por ejemplo, esta instrucción actualiza los valores de las columnas Bonus, CommissionPct y SalesQuota en todas las filas de la tabla SalesPerson.

USE AdventureWorks2008R2;
GO
UPDATE Sales.SalesPerson
SET Bonus = 6000, CommissionPct = .10, SalesQuota = NULL;
GO

En una operación de actualización se pueden calcular y usar los valores de las columnas calculadas. En el ejemplo siguiente se duplica el valor de la columna ListPrice para todas las filas de la tabla Product.

USE AdventureWorks2008R2 ;
GO
UPDATE Production.Product
SET ListPrice = ListPrice * 2;
GO

Las expresiones que se utilizan en la cláusula SET también pueden ser subconsultas que devuelven un único valor. En este ejemplo se modifica la columna SalesYTD de la tabla SalesPerson para reflejar las ventas más recientes registradas en la tabla SalesOrderHeader. Las subconsultas suman las ventas de cada vendedor de la instrucción UPDATE.

USE AdventureWorks2008R2;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + 
    (SELECT SUM(so.SubTotal) 
     FROM Sales.SalesOrderHeader AS so
     WHERE so.OrderDate = (SELECT MAX(OrderDate)
                           FROM Sales.SalesOrderHeader AS so2
                           WHERE so2.SalesPersonID = so.SalesPersonID)
     AND Sales.SalesPerson.BusinessEntityID = so.SalesPersonID
     GROUP BY so.SalesPersonID);
GO