2012-06-01 3 views
23

트리거가있는 테이블에 레코드를 삽입하는 OLE DB 대상 구성 요소가있는 SSIS 데이터 흐름 태스크가 있습니다. 이 테이블에 대해 정상적인 INSERT 문을 실행하면 트리거가 실행됩니다. SSIS 작업을 통해 레코드를 삽입하면 트리거가 실행되지 않습니다.SSIS에서 삽입하는 동안 트리거가 실행되지 않는 이유는 무엇입니까?

SSIS에서 트리거를 실행하려면 어떻게해야합니까?

답변

45

OLE DB 대상 작업은 대량 삽입을 사용하기 때문에 트리거는 기본적으로 실행되지 않습니다. BULK INSERT (MSDN) :

FIRE_TRIGGERS를 지정하지 않으면 삽입 트리거가 실행되지 않습니다.

은 수동으로 고급 편집기를 통해 OLE DB 구성 요소의 일부로 FIRE_TRIGGERS를 지정해야합니다.

enter image description here

다음 (옵션은 쉼표로 구분 참고) FastLoadOptions을의 값으로 "FIRE_TRIGGERS"를 추가 :

enter image description here

를 장소에이 옵션을 사용하면 트리거가 발생한다 작업이 실행되는 동안

+0

ADO.Net 연결을 사용하고 SQL 데이터베이스에서 프로그래밍 방식으로 작업하는 경우 유사한 옵션이 있습니까? – NealR

+0

@NealR : 예, [SqlBulkCopy] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx)를 참조하십시오. – ladenedge

+0

'OLE DB Destination'을 사용하여'Keep nulls '를 선택하면 트리거가 실행되지 않을뿐입니다. – MisterIsaak

14

라덴 지드 답을 보완합니다.

는 OLE DB 대상 작업이 대량 삽입을 사용하기 때문에

은, 트리거는 는 "빠른로드"옵션을 선택했을 때 사실이다 기본

에 의해 해고되지 않습니다.

enter image description here

정기적으로 변경 "테이블 또는 뷰"데이터 액세스 모드를 경우 삽입이 사용하지 않고 행 단위

+0

일반적으로 수십만 개의 행이 너무 느려서 행 단위 작업을 수행 할 수 없기 때문에 대량로드를 사용하고 있습니다. 많은 사람들이 이것이 최상의 솔루션이 아니라는 것을 알게 될 것입니다. –

0

당신이 할 수있는 일을하기 때문에, 당신의 트리거가 정상적으로 발사한다 메모장 (또는 다른 텍스트 편집기)을 사용하여 dtsx 파일을 편집하여 Visual Studio 용 SQL Server 데이터 도구. 다음과 같은 속성에 대한

검색 :

<property 
dataType="System.String" 
description="Specifies options to be used with fast load. Applies only 
if fast load is turned on." 
name="FastLoadOptions"> 
     TABLOCK,CHECK_CONSTRAINTS 
</property> 

디에고 이미 설명한 바와 같이 값 FIRE_TRIGGERS를 추가합니다.

관련 문제