xp_cmdshell und trigger

04/06/2008 - 12:48 von Achim Ehlers | Report spam
Hallo NG,


folgendes Szenario:

Wird in einer Tabelle auf dem SQL Server der Status eines Datensatzes auf
einen bestimmten Wert geàndert
und erfüllt dieser Datensatz auch noch weiteren Kriterien, so soll eine XML
datei erzeugt werden.
Diese Datei soll anhand einer dtd validiert werden und wenn alles i.O ist
der Status des Datensatzes
auf dem SQL Server hochgesetzt werden.

Das ganze habe ich versucht per Trigger zu lösen.

Wird der Status des Datensatztes geàndert und treffen auch die weiteren
Kriterien zu,
so wird per xp_cmdshell ein externes c# programm aufgerufen
welches die XML Datei erzeugt und im Erfolgsfalle eine 0 ansonsten eine 1
zurückgibt.

Im Prinzip funktioniert das auch, allerdings nicht wenn ich das ganze in
einen Trigger einbaue.
In diesem Falle kommt es zu einer Blockierung.

Das c# Programm baut eine Verbindung zum SQL Server auf und sucht Datensàtze
mit dem passenden Status und den den passenden Kriterien.
Da das Ganze sich aber noch im Trigger befindet, haben die Datensàtze aber
noch nicht den passenden Status.

schreibe ich ein commit in den Trigger und möchte anschließend die
xp_cmdshell aufrufen wird diese Codezeile im Trigger nicht mehr erreicht.


Das war vielleicht etwas weit ausgeholt.
folgende Frage.

Wie muß ich es anstellen, daß wenn ein Datensatz in ein einer SQL
Servertabelle einen gewissen Zustand erreicht,
ein externes Programm aufgerufen wird welches genau diesen Datensatz findet
und verarbeitet.


Vielen Dank für eure Tipps

Gruß
Achim
 

Lesen sie die antworten

#1 Stefan Hoffmann
04/06/2008 - 13:10 | Warnen spam
hallo Achim,

Achim Ehlers schrieb:
Wie muß ich es anstellen, daß wenn ein Datensatz in ein einer SQL
Servertabelle einen gewissen Zustand erreicht,
ein externes Programm aufgerufen wird welches genau diesen Datensatz findet
und verarbeitet.


Verzichte auf den Trigger und lass es asynchon ablaufen. D.h. dein
Trigger setzten bei passenden Kriterien den Status auf PENDING anstatt
das externe Programm aufzurufen.

Deine externes Programm (idealerweise ein Service) pollt in
entsprechendem Intervall die Datensàtze mit Status PENDING, erzeugt die
XML's und setzt den Status auf DONE.


mfG

Ähnliche fragen