Trigger auslösen bei SqlBulkCopy

PC Das Objekt SqlBulkCopy ist ein mächtiges Objekt in der ADO.NET-Welt. Mit diesem könnt Ihr performancestark große Datenmengen aus einer Datenquelle in eine MS SQL Datenbank verschieben.

Datenquellen können dabei alle möglichen Datenkontainer sein, die Ihr mit ADO.NET ansprechen könnt. Dies kann eine Textdatei sein, aber auch eine Tabelle einer Datenbank, die sich auf einem ganz anderen Server befindet.

Ich stand nun vor der Aufgabe solch ein Datenverschiebung durchzuführen. Allerdings musste ich die Daten in eine Tabelle verschieben, die einen Trigger besaß. Dieser Trigger wurde immer bei einem INSERT, UPDATE oder DELETE ausgelöst. Nur löst ein SqlBulkCopy diesen Trigger standardmäßig nicht aus.

Was also tun?

Nach etwas Recherche bin ich darauf gestoßen, dass es zwar keine Property gibt, mit der man dieses steuern kann, aber sehr wohl eine andere Möglichkeit existiert.

Der Konstruktor des SqlBulkCopy – Objektes besitzt nämlich verschiedene Überladungen. Bei zwei Überladungen kann man diesem ein Enum namens SqlBulkCopyOptions mitgeben. Ein Enum-Option lautet dann auch FireTriggers. Und schon klappt alles wie gewünscht.

Fassen wir zusammen: Um beim BulkCopy Trigger zu feuern müsst Ihr den passenden Konstruktor wählen und SqlBulkCopyOptions auf FireTriggers stellen.

Ich hoffe Euch hilft dieser Artikel weiter.

kick it on dotnet-kicks.de

No Responses