2011-01-27 2 views
5

나는 특정 테이블에 레코드를 삽입하려는 SQL Server에서 작업 중입니다. (a),이 테이블에는 두 개의 열 [id (Identity Field) 및 name (nvarchar (max)] 레코드가 테이블 (a)에 삽입 된 후 트리거가 발생하고 B 필드에 ID 필드 값을 삽입해야합니다.이 목적을 위해 삽입 트리거를 사용하지만 사용 방법을 얻지 못했습니다. 나는 표 B에 삽입해야 트리거의 ID 필드 값을 ... 얻는 것입니다.SQL Server 2008에서 삽입 트리거 후 작업 방법

이 내가

create trigger tri_inserts on (a) 
after insert 
as 
begin 
    insert into b (id, name) values (?,?) 
end 

가 가능한 한 빨리 회신 해 주시기 바랍니다 사용하고 무엇인가 ..을감사 및 감사 압바스 Electricwala

+0

SQL ID를 얻는 방법과 각 동작에 대한이 질문을 참조하십시오. http://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row – nybbler

+0

@nybbler : 이것은 실제 삽입시. INSERT 트리거에서 INSERTED 테이블 – gbn

답변

12
create trigger tri_inserts on a 
after insert 
as 
set nocount on 

insert into b (id, name) 
    SELECT id, name FROM INSERTED 
GO 
+0

을 읽어 주셔서 감사합니다. – Abbas

6

@gbn는 최적의 솔루션을 가지고,하지만 난 SELECT 절은 트리거의 VALUES 절을 사용하는 것보다 더 나은 이유를 이해합니다. 레코드 삽입/업데이트/삭제의 각 배치에 대해 트리거를 실행합니다. 따라서 삽입 된 pseudotable 또는 삭제 된 pseudotable은 하나의 레코드를 가질 수 있거나 백만 개가있을 수 있습니다. 트리거는 두 경우 모두 처리 할 수 ​​있어야합니다. 값 절을 사용하면 백만 분의 레코드 중 하나에 대해서만 조치가 취해집니다. 이는 데이터 무결성 문제를 야기합니다. 커서의 레코드를 반복하고 VALUES 절을 사용하기로 결정하면 많은 수의 레코드를 얻을 때 성능이 끔찍할 것입니다. 이 직업에 왔을 때 우리는 그런 트리거를 하나 가지고 있었고, 40,000 개의 레코드 삽입물을 삽입하는 데 45 분이 걸렸습니다. 커서를 제거하고 SELECT 절에 기반한 집합 기반 솔루션을 사용합니다 (예보다 훨씬 복잡하지만) 동일한 삽입 시간이 약 40 초로 단축되었습니다.

관련 문제