Udostępnij za pośrednictwem


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