2016-10-17 4 views
0

Irgendwelche Ideen/Vorschläge geschätzt ....SQL Server: Importieren und Archivierung von wöchentlichen Daten

fragte ich habe mit einem einfachen Weg zu kommen, neue Daten zu importieren, erhalten wir von einem externen Anbieter (Textdateien). Wir bekommen mehrere Textdateien und jeder muss in eine eigene Tabelle importiert werden. Bei einigen Tabellen müssen die aktuellen/vorhandenen Daten in eine Tabelle mit dem Namen TABLENAME_Previous verschoben werden (um mit verschiedenen vorhandenen Berichten zu arbeiten), anschließend wird die aktuelle Tabelle geleert und die neuen Daten werden importiert. Außerdem müssen alle Daten, die sich jetzt in der "vorherigen" Tabelle befinden, an eine Archivtabelle angehängt werden.

Hier ist ein Beispiel:

customer.txt kommt von Anbieter ....

  1. Zuerst haben wir den Inhalt von customers_previous zu customers_arch

  2. Als nächstes gehen wir den Inhalt von customers bewegen customers_previous

  3. Endgültig ly wir die neue customers.txt Datei in die Tabelle importieren customers

Hat jemand schon einmal eine SQL-Routine zu tun dies geschrieben, oder weiß, wo man zu finden, das wäre nicht zu schmerzhaft zu ändern?

Dank

+0

Ist die Datei customer.txt abgegrenzt oder behoben? Beispieldaten der Textdatei würden auch helfen. –

+0

Komma getrennt CSV wir haben tatsächlich 12 verschiedene Textdateien, mit irgendwo von 10 bis 50 Felder, so wäre es ein Schmerz, ihre Inhalte alle hier zu posten –

+0

Sind die Textdateien Namen konsistent jede Woche? Und alle Tabellen sind textfilename_previous zu textfilename_arch, etc? Wenn Namen konsistent sind, sollte SSIS in der Lage sein, damit umzugehen. –

Antwort

0

Sie so etwas wie diese versuchen kann:

Um Ihre vorherigen Daten zum Archiv

Insert into customers_arch select * from customers_previous 

zu kopieren, um Ihre Kundendaten zurück zu Kopie:

truncate table customers_previous; 
insert into customers_previous select * from customers 

Dann Um Ihre Textdatei zu laden, verwenden Sie die Option "Massen einfügen", um Ihre Kundentabelle nach dem Löschen zu laden .

truncate table customers; 
bulk insert customers 
from 'd:\yourfolder\customers.txt' 
WITH 
     ( 
     FIELDTERMINATOR =',', 
     ROWTERMINATOR ='\n' 
    ); 

UPDATE: Ok, Brian, Ihre andere Frage zu beantworten, wie es für mehrere Dateien in Ihrem WeeklyTable gespeichert auszuführen.

Angenommen, Ihre WeeklyTable ist wie folgt:

Declare @WeeklyTable TABLE(ID int Identity(1,1), [FileName] varchar(50)) 
insert into @WeeklyTable Values 
('Customers'),('Orders'), ('Order_Details') 

Sie können eine dynamische Abfrage erstellen Skript für jede Datei auszuführen.

Declare @Template varchar(max) 
Set @Template = ' 
    -- Start of [[FILENAME]] -------------------- 
    Insert into [FILENAME]_arch select * from [FILENAME]_previous 
    GO 

    truncate table [FILENAME]_previous; 
    insert into [FILENAME]_previous select * from [FILENAME] 
    GO 

    truncate table [FILENAME]; 
    bulk insert [FILENAME] 
    from ''d:\yourfolder\[FILENAME].txt'' 
    WITH 
      ( 
      FIELDTERMINATOR ='','', 
      ROWTERMINATOR =''\n'' 
     ); 


' 
Declare @s varchar(max) 
Declare @FileName varchar(50) 
Declare @ID int =0 

Select TOP 1 @ID=ID, @FileName=[FileName] From @WeeklyTable Where ID>@ID order by ID 
While @@ROWCOUNT>0 Begin 
    Set @s = REPLACE(@Template, '[FILENAME]', @FileName) 
    Print @s 
-- EXEC(@s) -- Uncomment to EXEC the script. 
    Select TOP 1 @ID=ID, @FileName=[FileName] From @WeeklyTable Where ID>@ID order by ID 
End 
+0

Danke, ich gebe das einen Versuch ... sieht ziemlich einfach aus! –

+0

Eine andere Frage ... wie könnte ich dies schreiben, um es für jede von mehreren Tabellen zu tun, die ich in einer Tabelle –

+0

Wie kann ich das für jede der Tabellen in einer Tabelle namens SELECT [FileName] , [FileAfterRename] , [TableName] –

Verwandte Themen