Laden von Dateien in FileTables
Gilt für: SQL Server
Beschreibt, wie Dateien in FileTables geladen und migriert werden.
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 beinhaltet 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 in diesem Artikel unter Beispiel: Migrieren von Dateien aus dem Dateisystem in eine FileTable. |
Vorgehensweise: Laden von Dateien in eine FileTable
Sie können die folgenden Methoden verwenden, um Dateien in eine FileTable zu laden:
Drag & Drop von Dateien aus den Quellordnern in den neuen FileTable-Ordner in Windows-Explorer.
Verwenden Sie Befehlszeilenoptionen wie
move
,copy
,xcopy
oderrobocopy
in der Eingabeaufforderung oder in einer Batchdatei oder einem Skript.Schreiben Sie eine benutzerdefinierte Anwendung in C# oder Visual Basic.NET, um die Dateien zu verschieben oder zu kopieren. Rufen Sie Methoden aus dem
System.IO
-Namespace auf.
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 Funktion GetPathLocator hilft Ihnen, dieses Ziel zu erreichen.
Nehmen Sie für dieses Beispiel an, dass eine Datenbanktabelle, PhotoMetadata
, vorhanden ist, die Daten zu Fotos enthält. Diese Tabelle enthält 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 aussieht wie im folgenden Beispiel:
-- 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);
Massenladen von Dateien in eine Dateitabelle
Eine FileTable verhält sich bei Massenvorgängen wie eine normale Tabelle für Massenvorgänge. Eine FileTable weist systemdefinierte Einschränkungen auf, die sicherstellen, dass die Integrität des Datei- und Verzeichnisnamespace 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
mitCHECK_CONSTRAINTS
-Klausel.INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
ohneIGNORE_CONSTRAINTS
-Klausel.
- bcp mit
Massenladevorgänge, die keine Einschränkungen erzwingen, führen zu Fehlern, es sei denn, die für FileTable vom System definierten Einschränkungen sind deaktiviert. Zu dieser Kategorie gehören die folgenden Vorgänge:
- bcp ohne
CHECK_CONSTRAINTS
-Klausel. BULK INSERT
ohneCHECK_CONSTRAINTS
-Klausel.INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
mitIGNORE_CONSTRAINTS
-Klausel.
- bcp ohne
Vorgehensweise: Massenladen von Dateien in eine FileTable
Sie können verschiedene Methoden zum Massenladen von Dateien in eine FileTable verwenden:
Führen Sie einen Aufruf mit der CHECK_CONSTRAINTS
-Klausel aus.
Deaktivieren Sie den FileTable-Namespace, und führen Sie den Aufruf ohne die CHECK_CONSTRAINTS
-Klausel aus. Aktivieren Sie dann den FileTable-Namespace erneut.
Informationen zum Deaktivieren der FileTable-Einschränkungen finden Sie unter Verwalten von FileTables.
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.