오늘은 수정 문(INSERT, UPDATE, DELETE)에서 테이블 변수에 데이터를 반환할 수 있도록 SQL Server 2005의 출력 절을 살펴보았습니다. 결과가 포함된 DML에 대한 유용한 시나리오에는 제거 및 보관, 메시징 애플리케이션 및 기타 시나리오가 포함됩니다. 이 새로운 OUTPUT 절의 구문은 다음과 같습니다.
OUTPUT <dml_select_list> INTO @table_variable은
트리거 접근과 유사하게 삽입된 테이블과 삭제된 테이블을 참조하여 수정된 행의 이전/새 이미지에 접근할 수 있습니다. INSERT 문에서는 삽입된 테이블에만 접근할 수 있다. DELETE 문에서는 삭제된 테이블에만 접근할 수 있다. UPDATE 문에서는 삽입된 테이블과 삭제된 테이블에 액세스할 수 있습니다. 다음은 MSDN의 예입니다.
결과가 포함된 DML에 유용할 수 있는 제거 및 보관 구성표의 예로 대규모 Orders 테이블이 있고 정기적으로 기록 데이터를 제거한다고 가정합니다. 또한 제거된 데이터를 OrdersArchive라는 보관 테이블에 복사하려고 합니다. @DeletedOrders라는 테이블 변수를 선언하고 기록 데이터를 청크로 삭제하는 루프를 입력합니다(예: 2003년보다 오래된 주문). 여기에 추가된 코드는 삭제된 모든 행의 모든 속성을 @DeletedOrders 테이블 변수에 복사한 다음 INSERT INTO 문을 사용하여 테이블 변수의 모든 행을 OrdersArchive 테이블에 복사하는 OUTPUT 절입니다.
DECLARE @DeletedOrders TABLE
(
주문 ID INT,
주문 날짜 DATETIME,
엠피드INT,
수탁자 VARCHAR(5),
수량INT
)
1=1인 동안
시작하다
트랜 시작
주문에서 TOP(5000) 삭제
출력이 삭제되었습니다.* INTO @DeletedOrders
WHERE 주문 날짜 < '20030101'
OrdersArchive에 삽입
SELECT * @DeletedOrders에서
전송 커밋
@DeletedOrders에서 삭제
IF @@행 개수 < 5000
부서지다
END
또 다른 예는 다음과 같은 테이블이 있는 경우입니다. 테이블 생성 Employee(EmpID int Identity(1, 1) Constraint Employee_pk 기본 키, FirstName varchar(100), LastName Varchar(100), Sex char(1), Sex ='M'인 경우 'Mr.'인 경우 Sex ='F'인 경우 'Ms.' else ''인 경우 급여 금액, 급여 <3000인 경우 .20 * 급여가 30000과 50000 사이인 경우 그런 다음 .26* 급여가 50001에서 75000 사이인 경우 급여 그런 다음 .30*Salaryelse .35*급여 종료, DOJ 날짜 시간 제약 DOJ_DEF 기본 getdate())
} Case 절을 사용하여 인사말, 공제, doj 등을 각각 설정하는 매우 간단한 테이블입니다. 그리고 다음과 같이 또 다른 저장 프로시저를 생성할 수 있습니다. 프로시저 생성 Employee_insert@Fname varchar(100),@Lname varchar(100),@sex char(1),@Salary Moneyasdeclare @empoutput table (EmpID int, FirstName varchar(100) , 성 Varchar(100), 성별 문자(1), 인사말 문자(3), 급여, 공제금, DOJ 날짜 시간 )insert into Employee(FirstName,LastName,Salary,sex)OUTPUT insert.* into @empoutputvalues(@Fname ,@Lname ,@Salary,@sex )@empoutput에서 *를 선택합니다.
그런 다음 저장 프로시저를 호출할 때 다음과 같이 USE [MyDatabase]를 사용할 수 있습니다.
GOexec Employee_insert 'Miho','Yoshikawa','F',146000
이러한 방식으로 실행 중에 직원 테이블에 데이터가 삽입되고 임시 변수 empoutput이 테이블 형식으로 정의될 수 있습니다. 여기서는 쉽게 확인할 수 있도록 폼에 정의되어 있으며, Employee 테이블에 삽입된 데이터가 동시에 empoutput 변수로 출력되게 됩니다. 이 저장 프로시저를 실행하면 다음과 같은 결과를 확인할 수 있습니다.
EmpID, 이름, 성, 성별, 인사말, 급여, 공제, DOJ
7,Miho,Yoshikawa,F,Ms.,146000.00,51100.00,2006-04-09 23:16:44.920
, 레코드는 실제로 직원 테이블에 삽입됩니다.
출처를
볼 수 있습니다
: jackyrong BLOG