SSIS – niedziałające TRIGGER-y

Zalety oraz wady stosowania TRIGGER-ów w bazach danych, a już w szczególności w przypadku hurtowni danych, to temat na zupełnie inny wpis. W ramach niniejszego wpisu chciałbym opisać co zrobić w sytuacji kiedy chcemy w SQL Server Integration Services wykorzystać obiekt do którego został dodany właśnie TRIGGER. Okazuje się bowiem, że podczas próby załadowania danych do tabeli lub widoku z TRIGGER-em obiekt ten po prostu nie zadziała, a sam SSIS nie da nam żadnego komunikatu informującego o tym fakcie.

Powyższy przykład ilustruje bardzo prosty przepływ, gdzie SCRIPT TASK zwraca dwa zestawy danych. Następnie dla każdego zestawu utworzony jest osobny przepływ dla którego zliczana jest liczba rekordów i na końcu dane te ładowane są do widoku na którym założony został TRIGGER. Jak już wspomniałem wcześniej przy próbie uruchomienia pakietu (niezależnie czy przez Visual Studio czy przy pomocy SQL Server Agent) Integration Services zakończy pracę bez błędów, natomiast TRIGGER nie zostanie wywołany.

Jak więc rozwiązać ten problem? W bardzo prosty, aczkolwiek mało intuicyjny sposób. Tak więc aby “zmusić” SSIS do wywoływania TRIGGER-ów poprzez dodanie do właściwości FastLoadOptions musimy dodać dodatkowy parametr: FIRE_TRIGGERS tak jak zostało to przedstawione na poniższym zrzucie ekranowym.

Korzystając z edytora komponentu, w tym przypadku OLE DB Destination lub bezpośrednio poprzez właściwości komponentu musimy dodać stosowną opcję, która pozwoli nam w wykorzystać TRIGGER-y w Integration Services. Tak więc jak widać rozwiązanie problemu jest bardzo proste – wystarczy znać przełącznik FIRE_TRIGGERS.

Slawomir Drzymala
Follow me on

Leave a Reply