1. Liste der Dateien als Datenquelle
Um ein möglichst einfaches DTS-Paket zu erhalten, sollten die Dateinamen in
Tabellenform vorliegen. Dazu gibt es natürlich verschiedene Möglichkeiten. So
könnte man zum Beispiel alle Dateinamen zeilenweise in eine Textdatei schreiben
und diese dann als Quelle verwenden. Dieser Ansatz ist mit relativ einfachen
Mitteln zu realisieren - schöner wäre es jedoch ein direktes Listing der
Tabellen zu erhalten.
Nach einigem Suchen stieß ich auf die erweiterte gespeicherte Prozedur xp_dirtree
in der master-Datenbank. Diese Prozedur listet standardmäßig alle
Unterverzeichnisse für das angegebene Verzeichnis auf. Dabei werden beim
einfachen Aufruf alle Ebenen durchsucht.
Durch Angabe eines zweiten Parameters läßt sich die Suchtiefe jedoch
einschränken: So listet der Aufruf EXEC master..xp_dirtree 'C:\Daten', 1 nur
alle direkten Unterverzeichnisse von C:\Daten auf. Was fehlt sind die
Dateinamen. Nach etwas Detektivarbeit mit Hilfe des Profilers (das
Ablaufverfolgungstool des SQL Servers) war die Lösung gefunden: Über einen
dritten Parameter lassen sich auch alle Dateien listen. Sollen zum Beispiel alle
Dateien im Verzeichnis C:\Daten angezeigt werden, kann das folgende Script
verwendet werden:
EXEC master..xp_dirtree 'C:\Daten', 1, 1
Als Ergebnis erhält man eine Tabelle mit allen Dateien und Unterverzeichnissen des Ordners C:\Daten. In der Ergebnisspalte File läßt sich ablesen, ob es sich um eine Datei oder ein Verzeichnis handelt.
Mit diesem Hintergrundwissen läßt sich leicht eine gespeicherte Prozedur schreiben, die alle Dateien in einem Verzeichnis zurückliefert:
CREATE PROCEDURE getFileNames @Folder nvarchar(255) = N'C:\',
@Extension nvarchar(3) = N'GIF' AS SET NOCOUNT ON CREATE TABLE
#tempFiles(filename nvarchar(255), depth int, isfile int) INSERT INTO
#tempFiles EXEC master..xp_dirtree @folder, 1,2 SELECT
filename FROM #tempFiles WHERE isfile = 1 AND RIGHT(filename,3) LIKE @extension
GO
Diese Prozedur kann jetzt einfach aufgerufen werden:
EXEC master..getFileNames 'C:\Daten\Grafik', 'GIF'
Liefert die Namen aller Gif-Dateien im Verzeichnis 'C:\Daten\Grafik' zurück. Beachten muss man natürlich, dass hier der SQL Server direkt auf das Verzeichnis
zugreift - es muß also sichergestellt sein, das das Dienstkonto des SQL Servers
Lesezugriff auf das Verzeichnis besitzt.
Sie finden dieses Script zum Download unter http://www.itrain.de/knowhow/sql/tsql/xp/getfilenames.asp zum Download.
|