Modification de données à l'aide de la clause SET

La clause SET spécifie les colonnes à modifier et les nouvelles valeurs à leur attribuer. Les valeurs des colonnes spécifiées sont mises à jour par celles spécifiées dans la clause SET, et cela dans toutes les lignes qui répondent aux critères de recherche indiqués dans la clause WHERE.

L'exemple suivant remplace la valeur du code postal des lignes qui correspondent à une ville spécifiée.

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

Si aucune clause WHERE n'est spécifiée, toutes les lignes sont mises à jour. Par exemple, cette instruction met à jour les valeurs des colonnes Bonus, CommissionPct et SalesQuota de toutes les lignes de la table SalesPerson.

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

Les valeurs calculées des colonnes peuvent être calculées et utilisées dans une opération de mise à jour. L'exemple ci-dessous double la valeur de la colonne ListPrice de toutes les lignes de la table Product.

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

Les expressions utilisées dans la clause SET peuvent également être des sous-requêtes qui retournent une seule valeur. L'exemple ci-dessous modifie la colonne SalesYTD de la table SalesPerson pour refléter les dernières ventes enregistrées dans la table SalesOrderHeader. Les sous-requêtes consolident les ventes de chaque commercial dans l'instruction 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