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 Kenntnisse ü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 mit 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 oder ROBOCOPY an 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 Namespace System.IO auf.

Beispiel: Migrieren von Dateien aus dem Dateisystem in eine FileTable

In diesem Szenario werden Ihre Dateien im Dateisystem gespeichert, und Sie verfügen über eine Tabelle mit Metadaten in SQL Server, 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-Funktion (Transact-SQL) 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:

  1. Erstellen Sie eine neue FileTable, in der sich die Dateien befinden. In diesem Beispiel wird der Tabellenname dbo.PhotoTableverwendet; 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 ähnlich wie im folgenden Beispiel 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);  

Massenladen von Dateien in eine FileTable

Eine FileTable verhält sich bei Massenvorgängen wie eine normale Tabelle, jedoch mit folgenden Merkmalen:

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 mit CHECK_CONSTRAINTS-Klausel.

    • EINFÜGEN IN ... 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.

    • EINFÜGEN IN ... SELECT * FROM OPENROWSET(BULK ...) mit IGNORE_CONSTRAINTS Klausel.

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.

  • EINFÜGEN IN ... 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.

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.

Weitere Informationen

Zugreifen auf FileTables mit Transact-SQL
Zugreifen auf FileTables mit Datei-E/A-APIs