Laden von Dateien in FileTables
Beschreibt, wie Dateien in FileTables geladen und migriert werden.
In diesem Thema
Ich möchte…
Dateien in eine FileTable laden oder migrieren
Vorgehensweise: Laden von Dateien in eine FileTable
Beispiel: Migrieren von Dateien aus dem Dateisystem in eine FileTable
Massenladen von Dateien in eine FileTable
Vorgehensweise: Massenladen von Dateien in eine FileTable
Vorgehensweise: Deaktivieren von FileTable-Einschränkungen zum Massenladen
Laden oder Migrieren von Dateien in FileTables
Die Methode, die Sie zum Laden oder Migrieren von Dateien in eine FileTable auswählen, ist davon abhängig, wo die Dateien aktuell gespeichert sind.
Aktueller Speicherort von Dateien |
Optionen für die Migration |
---|---|
Dateien sind derzeit im Dateisystem gespeichert. SQL Server hat keine Informationen über die Dateien. |
Da eine FileTable im Windows-Dateisystem als Ordner angezeigt wird, können Sie Dateien mithilfe einer der verfügbaren Methoden zum Verschieben oder Kopieren von Dateien ganz einfach in eine neue FileTable laden. Zu diesen Methoden gehören Windows-Explorer, Befehlszeilenoptionen, einschließlich xcopy und robocopy, sowie benutzerdefinierte Skripts oder Anwendungen. Sie können einen vorhandenen Ordner nicht in eine FileTable konvertieren. |
Dateien sind derzeit im Dateisystem gespeichert. SQL Server enthält eine Tabelle von Metadaten, die Zeiger auf die Dateien enthält. |
Der erste Schritt besteht darin, die Dateien mithilfe einer der oben erwähnten Methoden zu verschieben oder zu kopieren. Der zweite Schritt besteht darin, die vorhandene Tabelle von Metadaten so zu aktualisieren, dass diese auf den neuen Speicherort der Dateien zeigt. Weitere Informationen finden Sie unter Beispiel: Migrieren von Dateien aus dem Dateisystem in eine FileTable in diesem Thema. |
[NACH OBEN]
Vorgehensweise: Laden von Dateien in eine FileTable
Zu den Methoden, über die Sie Dateien in eine FileTable laden können, gehören die folgenden:
Drag & Drop von Dateien aus den Quellordnern in den neuen FileTable-Ordner in Windows-Explorer.
Verwenden Sie Befehlszeilenoptionen, z. B. MOVE, COPY, XCOPY oder ROBOCOPY, an der Eingabeaufforderung oder in einer Batchdatei oder einem Skript.
Schreiben Sie eine benutzerdefinierte Anwendung in C# oder Visual Basic .NET, die Methoden aus dem System.IO-Namespace verwendet, um die Dateien zu verschieben oder zu kopieren.
[NACH OBEN]
Beispiel: Migrieren von Dateien aus dem Dateisystem in eine FileTable
In diesem Szenario werden die Dateien im Dateisystem gespeichert, und Sie verfügen in SQL Server über eine Tabelle mit Metadaten, die Zeiger auf die Dateien enthält. Sie möchten die Dateien in eine FileTable verschieben und den ursprünglichen UNC-Pfad für jede Datei in den Metadaten durch den FileTable-UNC-Pfad ersetzen. Die GetPathLocator (Transact-SQL)-Funktion ist hierbei behilflich.
Nehmen Sie für dieses Beispiel an, dass eine Datenbanktabelle, PhotoMetadata, vorhanden ist, die Daten zu Fotos enthält. Diese Tabelle hat eine Spalte UNCPath des Typs varchar(512), der den tatsächlichen UNC-Pfad zu einer JPG-Datei enthält.
Um die Bilddateien aus dem Dateisystem in eine FileTable zu migrieren, müssen Sie wie folgt vorgehen:
Erstellen Sie eine neue FileTable, in der sich die Dateien befinden. In diesem Beispiel wird der Tabellenname dbo.PhotoTable verwendet; es wird jedoch nicht der Code zum Erstellen der Tabelle aufgeführt.
Verwenden Sie xcopy oder ein ähnliches Tool, um die JPG-Dateien mit ihrer Verzeichnisstruktur in das Stammverzeichnis der FileTable zu kopieren.
Korrigieren Sie die Metadaten in der Tabelle PhotoMetadata mithilfe von Code, der folgendermaßen aussieht:
-- Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator hierarchyid;
-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot varchar(100) = '\\RemoteShare\Photographs';
-- Get the root path of the FileTable.
DECLARE @FileTableRoot varchar(1000);
SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');
-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);
-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);
[Nach oben]
Massenladen von Dateien in eine FileTable
Eine FileTable verhält sich bei Massenvorgängen wie eine normale Tabelle, jedoch mit den folgenden Charakteristiken.
Eine FileTable weist systemdefinierte Einschränkungen auf, durch die sichergestellt wird, dass die Namespaceintegrität der Datei und des Verzeichnisses erhalten bleibt. Diese Einschränkungen müssen für die Daten überprüft werden, die mit einem Massenvorgang in die FileTable geladen wurden. Da einige Masseneinfügungsvorgänge das Ignorieren der Tabelleneinschränkungen zulassen, werden folgende Anforderungen erzwungen.
Massenladevorgänge, die Einschränkungen erzwingen, können für eine FileTable sowie alle anderen Tabellen ausgeführt werden. Zu dieser Kategorie gehören die folgenden Vorgänge:
bcp mit CHECK_CONSTRAINTS-Klausel.
BULK INSERT mit CHECK_CONSTRAINTS-Klausel.
INSERT INTO … SELECT * FROM OPENROWSET(BULK …) ohne IGNORE_CONSTRAINTS-Klausel.
Massenladevorgänge, die keine Einschränkungen erzwingen, führen zu Fehlern, es sei denn, die für FileTable vom System definierten Einschränkungen wurden deaktiviert. Zu dieser Kategorie gehören die folgenden Vorgänge:
bcp ohne CHECK_CONSTRAINTS-Klausel.
BULK INSERT ohne CHECK_CONSTRAINTS-Klausel.
INSERT INTO … SELECT * FROM OPENROWSET(BULK …) mit IGNORE_CONSTRAINTS-Klausel.
[NACH OBEN]
Vorgehensweise: Massenladen von Dateien in eine FileTable
Sie können verschiedene Methoden zum Massenladen von Dateien in eine FileTable verwenden:
bcp
Aufruf mit der CHECK_CONSTRAINTS-Klausel.
Deaktivieren Sie den FileTable-Namespace, und führen Sie den Aufruf ohne die CHECK_CONSTRAINTS-Klausel aus. Aktivieren Sie dann den FileTable-Namespace erneut.
BULK INSERT
Aufruf mit der CHECK_CONSTRAINTS-Klausel.
Deaktivieren Sie den FileTable-Namespace, und führen Sie den Aufruf ohne die CHECK_CONSTRAINTS-Klausel aus. Aktivieren Sie dann den FileTable-Namespace erneut.
INSERT INTO … SELECT * FROM OPENROWSET(BULK …)
Aufruf mit der IGNORE_CONSTRAINTS-Klausel.
Deaktivieren Sie den FileTable-Namespace, und führen Sie den Aufruf ohne die IGNORE_CONSTRAINTS-Klausel aus. Aktivieren Sie dann den FileTable-Namespace erneut.
Informationen zum Deaktivieren der FileTable-Einschränkungen finden Sie unter Verwalten von FileTables.
[Nach oben]
Vorgehensweise: Deaktivieren von FileTable-Einschränkungen zum Massenladen
Um Dateien in einem Massenvorgang in eine FileTable zu laden und dabei den Aufwand zu vermeiden, die systemdefinierten Einschränkungen zu erzwingen, können Sie die Einschränkungen vorübergehend deaktivieren. Weitere Informationen finden Sie unter Verwalten von FileTables.
[Nach oben]