Varrius Geschrieben 14. Juni 2007 Teilen Geschrieben 14. Juni 2007 Hallo allesamt, ich arbeite mit SQL2005 und habe einen Trigger erstellt, welcher nach einem Insert ausgeführt wird. In diesem Trigger werden Daten aus dem neuen Datensatz ausgelesen und sollen in eine XML Datei geschrieben werden. Da ich hier keinen Ansatz hatte, habe ich erst einen String erstellt in dem sozusagen das InnerXML aufgebaut ist Am Ende des Triggers führe ich 2 xp_cmdshells aus, wobei die 2te dann leider dafür sorgt, das ein Rollback veranlaßt wird. (Ist zumindest meine Vermutung, da ohne diese xp_cmdshell die Daten danach noch in der DB enthalten sind.) Hier mal die 2 Befehle der Anschaulichkeit ein wenig modifiziert SET @befehl = 'echo "|<account>< ... ></account>|" > c:\data.txt EXEC @befehl SET = 'for /f "tokens=2 delims=|" %i in (c:\data.txt) do echo %i > c:\new_account.xml' EXEC @befehl2 Wenn der Trigger so ausgeführt wird, sind die Daten danach nicht mehr in der Datenbank, die XML erhalte ich aber, soweit funktioniert das also sicher. Wenn das 2te xp_cmdshell auskommentiert wird, sind die Daten in der DB und die TXT Datei ist auch erstellt worden. Hat vielleicht jemand eine Idee was da falsch ist oder eine andere Möglichkeit die Daten zu bekommen? Vielen Dank, Varrius Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Varrius Geschrieben 15. Juni 2007 Autor Teilen Geschrieben 15. Juni 2007 Hab mir ein kleines Workaround gebastelt, bestehend aus einer .bat die den 2ten xp_cmdshell Befehl enthält. Natürlich wurde die Variable zu %%i verändert und es muss ein "@echo off" vor dem Befehl stehen, da der SQL Server den Return sonst wieder erhalten würde und das wohl einen Fehler verursacht hat. Das 2te xp_cmdshell ruft nun die .bat auf und meine Daten bleiben in der DB bestehen. Falls jemand eine bessere Methode kennt, gerne her damit Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.