Specifying the Data Source by Using the FROM Clause
Za pomocą klauzula FROM ściągać danych z jednego lub kilku tabel lub widoków w tabela, którą chcesz zaktualizować.W poniższym przykładzie modyfikuje SalesYTD kolumna w SalesPerson tabelę, aby odzwierciedlić najnowsze sprzedaży w SalesOrderHeader Tabela.
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
W poprzednim przykładzie założono, że tylko jeden sprzedaży jest rejestrowana dla określonego sprzedawcy na określoną data i że aktualizacje są aktualne.Jeśli więcej niż jeden sprzedaży dla określonego sprzedawcy mogą być rejestrowane tego samego dnia, w przykładzie pokazano nie działa poprawnie.W przykładzie jest uruchamiany bez błędów, ale każdy SalesYTD wartość jest aktualizowana tylko jeden sprzedaży, niezależnie od tego, ile sprzedaży faktycznie wystąpił w tym dniu. Wynika to z jednej instrukcja UPDATE nie aktualizuje tego samego wiersza dwa razy.
W sytuacji, w których sprzedaż więcej niż jeden dla określonego sprzedawcy mogą wystąpić w tym samym dniu sprzedaży każdego sprzedawcy muszą być zagregowane razem w obrębie UPDATE instrukcja, jak pokazano w poniższym przykładzie.
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