Udostępnij przez


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