使用 FROM 子句更改数据
使用 FROM 子句可以将数据从一个或多个表或视图拉入要更新的表中。下面的示例修改 SalesPerson
表中的 SalesYTD
列,以反映 SalesOrderHeader
表中记录的最近销售情况。
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO
上一个示例假定在特定日期只记录指定销售人员的一笔销售业务,并假定更新信息是最新的。如果在同一天中可以记录指定销售人员的多笔销售业务,所示的示例将不能正常运行。该示例运行时没有错误,但是每个 SalesYTD
值只能用一笔销售数据更新,而不管那一天实际发生了多少笔销售业务。这是因为一条 UPDATE 语句永远不会对同一行更新两次。
对于特定销售人员在同一天可销售不止一批的情况,每个销售人员的所有销售量必须在 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
请参阅
概念
通过使用 SET 子句更改数据
使用 WHERE 子句更改数据
使用 TOP 限制更新的数据
通过使用 UPDATE 更改数据