Jump to content

daHartl

Members
  • Gesamte Inhalte

    15
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von daHartl

  1. 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

     

     

  2. 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

     

     

     

     

  3. Hab total überlesen, dass BCP ja in der "Windows-Eingabeaufforderung" ausgeführt wird :-(.

    Daher leider ist es leider nicht zu gebrauchen für meine Anforderung.

     

    Ich habe hier ein SQL-Script (Start per .bat) was die Daten sozusagen von einer Transfertabelle (welche in dem Skript vorher mit BULK INSERT aus einer .CSV gefüllt wird) einliest.

     

    Jetzt hatte ich den Fall, dass ein Datumsformat erwartet wurde, jedoch ein Text in einem Feld stand und das Scrip abgebrochen ist.

    Da das Error.log-Handling beim BULK INSERT schon vorhanden ist, habe ich mir gedacht, ob es denn möglich wäre, im Fehlerfall (per TRY CATCH) eine

    "Fehlerdatei" (z.B. mit dem Inhalt der Transfertabelle) zu schreiben.

     

    Die Batch-Routine würde den Fehler erkennen und entsprechend weiter verarbeiten!

     

    da Hartl

  4. Hallo zusammen,

     

    gibt es eine Möglichkeit, per SQL-Query bei einem SQL 2005 Express die Daten einer Tabelle

    in ein .txt-File zu schreiben?

     

     

    Beispiel = funktioniert leider nicht!

    BCP MyDatabase.MyCustomer out c:\customer.txt 

    Falsche Syntax in der Nähe von '.'.

     

     

     

     

    Vielen Dank im Voraus für eure Hilfe!

     

    da Hartl

  5. Hallo zusammen,

     

    ich hab hier ein SQL-Import-Script welches Daten aus einer Transfertabelle einliest, entsprechend verarbeitet und in die Datenbank schreibt.

    Ist es möglich, ein LOG-File in ein Verzeichnis zu schreiben, falls irgend etwas schief läuft?

     

    z.B. wenn ein "ungültiger Datentyp" auftritt und die Verarbeitung gestoppt wird... bzw. dieser fehlerhafte Datensatz übersprungen wird.

     

    System: SQL 2005 Express

     

    daHartl


    vielen Dank im Voraus für eure Hilfe ;-)...

  6. Durch den BULK Import ist ja die Spaltenanzahl vorgeben.

    Vor der Verarbeitung der Daten wird der entsprechende Datensatz mit einer "1" in der Spalte "MARKER" markiert.

     

    Ist kein Datensatz mehr in der Tabelle, wir die Spalte "MARKER" gelöscht, damit wieder Daten aus einer CSV-Datei mit BULK importiert werden können.

     

    Macht es mehr Sinn, die Tabelle vor jedem Import komplett zu erstellen und im Anschluss zu löschen?

     

    Danke für eure Hilfe.

    da Hartl

  7. Hallo zusammen,

     

    ich hab hier eine Tabelle in welche ich per bulk 5x täglich die Daten importiere.

    Anschließend wird an diese Tabelle normalerweise per "Alter Table.. add"  eine weitere Spalte "MARKER" angefügt und am Ende der Verarbeitung wieder per "ALTER Table ... DROPP" entfernt.

     

    Dies funktioniert leider seit heute nicht mehr!

     

    Es erscheint folgende Fehlermeldung:

    Fehler beim ändern der Tabelle, weil keine eindeutigen Spalten-IDs mehr für die 'tblImport'-Tabelle vorhanden sind.

     

    Kann ich die ID`s irgendwie zurücksetzen oder gibt es dafür eine andere Lösung?

     

    Vielen Dank für die Hilfe!

     

    da Hartl

×
×
  • Neu erstellen...