通过使用 SET 子句更改数据

SET 子句指定要更改的列和这些列的新值。对所有符合 WHERE 子句搜索条件的行,将使用 SET 子句中指定的值更新指定列中的值。

下面的示例中,对符合指定城市的行,更改邮政编码值。

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

如果没有指定 WHERE 子句,则更新所有行。例如,此语句对 SalesPerson 表中的所有行更新 Bonus、CommissionPct 和 SalesQuota 列中的值。

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

计算列的值可在更新操作中计算和使用。下面的示例将 Product 表中所有行的 ListPrice 列的值加倍。

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

SET 子句中使用的表达式还可以是只返回一个值的子查询。下面的示例修改 SalesPerson 表中的 SalesYTD 列,以反映 SalesOrderHeader 表中记录的最近销售情况。这些子查询通过 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