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를 사용하여 데이터 변경