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:

  1. 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.

  2. Verwenden Sie xcopy oder ein ähnliches Tool, um die JPG-Dateien mit ihrer Verzeichnisstruktur in das Stammverzeichnis der FileTable zu kopieren.

  3. 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]

Siehe auch

Konzepte

Zugreifen auf FileTables mit Transact-SQL

Zugreifen auf FileTables mit Datei-E/A-APIs