Share via


Modifica dei dati utilizzando la clausola SET

La clausola SET specifica le colonne da modificare e i nuovi valori da inserire in tali colonne. I valori delle colonne specificate vengono aggiornati in base ai valori indicati nella clausola SET in tutte le righe che soddisfano la condizione di ricerca della clausola WHERE.

Nell'esempio seguente viene modificato il valore del codice postale nelle righe corrispondenti a una città specificata.

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

Se la clausola WHERE viene omessa, vengono aggiornate tutte le righe. Ad esempio, questa istruzione aggiorna i valori nelle colonne Bonus, CommissionPct e SalesQuota per tutte le righe della tabella SalesPerson.

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

È possibile individuare i valori delle colonne calcolate e utilizzarli in un'operazione di aggiornamento. Nell'esempio seguente viene raddoppiato il valore presente nella colonna ListPrice per tutte le righe della tabella Product.

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

Le espressioni utilizzate in clausole SET possono essere inoltre subquery che restituiscono un solo valore. Nell'esempio seguente viene modificata la colonna SalesYTD della tabella SalesPerson in modo che includa le vendite più recenti registrate nella tabella SalesOrderHeader. Le subquery aggregano le vendite per ogni venditore all'interno dell'istruzione 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