다음을 통해 공유


FROM 절을 사용하여 데이터 변경

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

관련 자료

UPDATE(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기