daHartl 0 Geschrieben 11. November 2014 Melden Teilen Geschrieben 11. November 2014 Hallo zusammen, folgende Anforderung Schreiben einer LOG-Datei z.B. eine INSERT_ERROR.txt in das Verzeichnis c:\Import\ERROR\ wenn irgendetwas den INSERT-Vorgang abbricht! Script: (Import.csv) Sorry, wollt in als CODE-darstellen, kommt aber nur sch... raus! ---------------------------------------------------------------------------------- set language deutsch USE [Rechnungen] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Import der Daten aus der CSV-Datei bulk insert dbo.tblImport from 'c:\import\Rechnungen.csv' go -- hinzufgen der "MARKER"-Spalte ALTER TABLE tblImport ADD MARKER Int Go -- fieldseperator = ; WITH (fieldterminator = ';',DATAFILETYPE = 'char' , rowterminator = '\n', FIRSTROW = 2, ERRORFILE = 'c:\Import\ERROR\Import_log.txt') go -- deklarieren der Variablen DECLARE @RechnungsNummer nvarchar(20); DECLARE @RechnunsDatum nvachar(50); While (SELECT count (*) FROM tblImport) > 0 Begin -- ersten Datensatz der Import-Tabelle markieren update top (1) tblRechnungen set MARKER = 1 -- setzen der Variablen SET @RechnungsNummer = (select RechnungsNummer from tblImport where MARKER = 1) SET @RechnunsDatum= (select RechnungsDatum from tblImport where MARKER = 1) -- Insertvorgang INSERT INTO dbo.tblRechnungen (ReNummer, ReDatum) VALUES (@RechnungsNummer, @RechnunsDatum) - Importierte Zeile lschen DELETE FROM tblRechnungen where MARKER = 1 End ALTER TABLE tblImport DROP COLUMN MARKER go ------------------------------------------------------------------ Dieser Script wird jede Stunde durch eine Import.bat angestoßen: Inhalt: sqlcmd -S Datastore -U sa -P [bleibtgeheim] -i "C:\Schnittstelle\scripts\IMPORT.sql" Ich hoffe, dass ich die Anforderung klar gestellt und beschrieben habe und mir jemand dabei behilflich sein kann, das Problem zu lösen! Vielen Dank im Voraus! da Hartl Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 11. November 2014 Melden Teilen Geschrieben 11. November 2014 Und weshalb soll TRY an dieser Stelle nicht helfen? http://msdn.microsoft.com/en-us/library/ms175976.aspx Am Ende des BEGIN CATCH die Fehlermeldungen in eine Fehlertabelle schreiben und den Inhalt der Tabelle in eine TXT schreiben. Zitieren Link zu diesem Kommentar
daHartl 0 Geschrieben 11. November 2014 Autor Melden Teilen Geschrieben 11. November 2014 Genau das ist ja meine Frage: Wie kann ich den Inhalt einer Tabelle per SQL-Befehl, also in dem BEGIN CATCH Bereich in eine TXT schreiben? Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 11. November 2014 Melden Teilen Geschrieben 11. November 2014 Wir drehen uns im Kreis, BCP hast Du ja schon selbst genannt: http://msdn.microsoft.com/en-us/library/ms175937.aspx#MethodsForBuliIE http://msdn.microsoft.com/en-us/library/aa337544.aspx Hier siehst Du den Wizard: http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm In diesem Link ist auch ein gutes Beispiel zu finden: http://www.mssqltips.com/sqlservertutorial/202/simple-way-to-export-data-from-sql-server/ Am besten erstellst Du dir eine View, die dir die Daten der letzten Stunde oder auch zwei Stunden aus der Protokoll Tabelle ausgibt, die nimmst Du als Grundlage für den Export. Zitieren Link zu diesem Kommentar
daHartl 0 Geschrieben 11. November 2014 Autor Melden Teilen Geschrieben 11. November 2014 Ja, ich denke auch. Ich möchte keine externe Verarbeitung oder nachträgliche Verarbeitung, sondern einen Möglichkeit IN dem SQL-Script selbst! so z.B.. BEGIN TRY Mein Import.sql - Script END TRYBEGIN CATCH [Hier der Befehl zum Exportieren der Daten bzw. Erstellen der TXT-Datei] END CATCH Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 11. November 2014 Melden Teilen Geschrieben 11. November 2014 Ich möchte keine externe Verarbeitung oder nachträgliche Verarbeitung, sondern einen Möglichkeit IN dem SQL-Script selbst! Dann schau dir die Möglichkeiten mit den Wizards an, das kannst Du AFAIK auch als Script abspeichern und immer wieder nutzen. Das SSIS Paket kann man auch aus einer Stored Procedure heraus starten, zumindest meine ich das schon mal gelesen zu haben. Weitere Links zu dem Thema: http://www.insidesql.org/blogs/cmu/sql_server/task-prozess-ausfuehren-mit-ereignishandler https://www.video2brain.com/de/tutorial/ssis-pakete-erstellen Zitieren Link zu diesem Kommentar
daHartl 0 Geschrieben 11. November 2014 Autor Melden Teilen Geschrieben 11. November 2014 Da ich einen SQL Server 2005 Express habe, kann ich mit dem Script-Assistenten erstelle Abfragen leider nicht speichern! In einem anderen Forum hab ich jetzt die Lösung gefunden: declare @sql varchar(8000) select @sql = 'bcp "select * from Rechnungen..tblImport" queryout c:\Import\ERROR\Import_ERROR.txt -c -t; -T -S' + @@servername -- -c -t; -r\n exec Rechnungen..xp_cmdshell @SQL (Sorry aber "Code" sieht einfach sch.. aus... warum auch immer) Wichtig ist halt nur xp_cmdshell vorher zu aktivieren und dem user sysadmin - Rechte zu geben -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO Mehr dazu steht hier: http://msdn.microsoft.com/de-de/library/ms175046.aspx Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 11. November 2014 Melden Teilen Geschrieben 11. November 2014 Danke für die Rückmeldung. ;) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.