Określanie źródła danych przy użyciu od klauzuli
Służy do klauzula FROM ściągać dane z tabel lub widoków do tabela, którą chcesz zaktualizować.Poniższy przykład modyfikuje SalesYTD kolumna w SalesPerson tabela, aby odzwierciedlić najnowsze sprzedaży rejestrowany w SalesOrderHeader tabela.
USE AdventureWorks2008R2;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.BusinessEntityID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = sp.BusinessEntityID);
GO
Poprzedni przykład zakłada, że sprzedaż tylko jeden jest rejestrowane dla określonego sprzedawcy na określoną data i aktualizacje są aktualne.Jeśli więcej niż jeden sprzedaży dla określonego sprzedawcy mogą być rejestrowane tego samego dnia, przykładu nie działa poprawnie.Przykład działa bez błędów, ale każdy SalesYTD wartość jest aktualizowana z tylko jednym sprzedaży, niezależnie od tego, ile transakcji sprzedaży faktycznie wystąpił w tym dniu.Wynika to pojedyncza aktualizacji instrukcja nigdy nie aktualizuje dwa razy tego samego wiersza.
W sytuacji, w której 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 UPDATE instrukcja, jak pokazano w następującym przykładzie.
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