2011-01-05 18 views
0

Ich habe ein Verzeichnis voller Dateien. Sie sind SQL-Skripte, aber ich möchte sie nicht ausführen. Ich möchte den Inhalt der Skriptdateien in eine Tabelle in meiner Datenbank importieren, um sie zu einem späteren Zeitpunkt auszuführen. Jede Datei würde eine eigene Zeile in der Tabelle haben.Importieren Sie mehrere Dateien in eine Tabelle

Ich arbeite derzeit mit Powershell, aber wenn es eine andere einfachere Methode gibt, die keine Software von Drittanbietern verwendet, dann wäre ich auch dafür offen.

Ursprünglich habe ich angefangen, Code zu schreiben, der die Dateien durchläuft, StreamReader verwendet, um den Inhalt abzurufen, und dann eine insert-Anweisung zum Ausführen zu erstellen. Ich erkannte jedoch, dass es große Probleme mit eingebetteten Zitaten in den Dateien usw. geben könnte.

Danke für jeden Hinweis, den Sie geben können!

+0

Bitte erzählen Sie uns mehr über die Skripte –

+0

Warum würde es Probleme mit eingebetteten Anführungszeichen geben? Können Sie eine parametrisierte Abfrage nicht verwenden oder habe ich sie falsch verstanden? –

+0

@bernd_k - Sie haben Text in ihnen. Sie sind nicht übermäßig groß. Ich weiß nicht, was Sie sonst noch wissen müssten, aber wenn Sie eine spezifische Frage haben, lassen Sie es mich bitte wissen. –

Antwort

2

Können Sie die eingebetteten Anführungszeichen entfernen und sie als zu ersetzenden logischen Abschnitt entweder durch String.Replace(old_str,new_str) oder tsql REPLACE in Ihrer Logik markieren? Unter dem Beispiel zeigt <condition_string> Marker, so dass Sie wissen, dass Sie besonders darauf geachtet haben.

declare @finalQuery nvarchar(1000) 

SET @finalQuery = 
(SELECT REPLACE ((
    SELECT REPLACE ((
     SELECT REPLACE('Select <column_names> from <table_name> where 
           <condition_string>' COLLATE Latin1_General_BIN, 
     '<column_names>', 
     'ID,[name]')), 
    '<table_name>', 
    '[MyTable]')), 

'<condition_string>', 
'[name] like ''%John%''')); 

EXEC(@finalQuery); 

GO 
+0

Ich landete eine $ string.Replace in Powershell, nur um es funktioniert so, dass ich könnte andere Aspekte testen, aber es funktioniert tatsächlich gut, also werde ich für jetzt bleiben. –

0

Wenn Sie mit Dateien in einer Datenbank arbeiten, möchten Sie diese entweder referenzieren, anstatt den gesamten Inhalt zu importieren (Sie speichern also nur einen Pfad zur Datei auf einem physischen Volume), oder Sie speichern sie als BLOBs (Binäre große Objekte). Wenn Sie Letzteres tun, können Sie sie auch zippen.

Der Nachteil dieser Techniken ist, dass Sie nicht nur mit einer SQL-Abfrage suchen können, aber Sie sagen nicht, ob das ein Problem für Sie ist?

+1

Sie haben die Frage falsch verstanden. Das OP möchte SQL, das von einer Datei gelesen wurde, in einer Spalte in einer Tabelle speichern und später den Inhalt dieser Spalte als SQL ausführen. –

+0

Wie Ken sagt, brauche ich die Dateiinhalte im Klartext verfügbar. Ich brauche auch die Datenbank vollständig enthalten - ich kann nicht um ein Verzeichnis von Skripten zusammen mit der Datenbank zu liefern, Pfaden, etc. –

Verwandte Themen