SET 句を使用したデータの変更

SET 句では、変更される列とその列の新しい値を指定します。WHERE 句の検索条件を満たすすべての行の指定された列の値が、SET 句で指定された値に更新されます。

次の例では、指定した市区町村に一致する行の郵便番号の値が変更されます。

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

WHERE 句を指定しないと、すべての行が更新されます。たとえば、次のステートメントにより、SalesPerson テーブルのすべての行の Bonus、CommissionPct、および SalesQuota の各列の値が更新されます。

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

計算列の値を計算し、この値を更新操作に使用できます。次の例では、Product テーブルのすべての行の ListPrice 列の値が 2 倍になります。

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

SET 句で使用される式を、1 つの値のみを返すサブクエリにもできます。次の例では、SalesPerson テーブルの SalesYTD 列が変更され、SalesOrderHeader テーブルに記録された最新の売上高が反映されます。サブクエリにより、UPDATE ステートメント内で各販売員の売上高が集計されます。

USE AdventureWorks;
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.SalesPersonID = so.SalesPersonID
     GROUP BY so.SalesPersonID);
GO