Udostępnij za pośrednictwem


Ładowanie plików do tabel plików

Dotyczy:programu SQL Server

Opisuje sposób ładowania lub migrowania plików do tabeli FileTables.

Ładowanie lub migrowanie plików do tabeli FileTable

Metoda wybrana do ładowania lub migrowania plików do tabeli FileTable zależy od tego, gdzie pliki są obecnie przechowywane.

Bieżąca lokalizacja plików Opcje migracji
Pliki są obecnie przechowywane w systemie plików.

Program SQL Server nie zna plików.
Ponieważ tabela FileTable jest wyświetlana jako folder w systemie plików systemu Windows, można łatwo załadować pliki do nowej tabeli FileTable przy użyciu dowolnej z dostępnych metod przenoszenia lub kopiowania plików. Te metody obejmują Eksploratora Windows, opcje wiersza polecenia takie jak xcopy i robocopy, a także niestandardowe skrypty lub aplikacje.

Nie można przekonwertować istniejącego folderu na tabelę FileTable.
Pliki są obecnie przechowywane w systemie plików.

Program SQL Server zawiera tabelę metadanych, która zawiera wskaźniki do plików.
Pierwszym krokiem jest przeniesienie lub skopiowanie plików przy użyciu jednej z powyższych metod.

Drugim krokiem jest zaktualizowanie istniejącej tabeli metadanych w celu wskazania nowej lokalizacji plików.

Aby uzyskać więcej informacji, zobacz Przykład: Migrowanie plików z systemu plików do FileTable w tym artykule.

Instrukcje: ładowanie plików do tabeli FileTable

Aby załadować pliki do tabeli FileTable, możesz użyć następujących metod:

  • Przeciągnij i upuść pliki z folderów źródłowych do nowego folderu FileTable w Eksploratorze Windows.

  • Użyj opcji wiersza polecenia, takich jak move, copy, xcopylub robocopy z wiersza polecenia lub pliku wsadowego lub skryptu.

  • Napisz aplikację niestandardową, aby przenieść lub skopiować pliki w języku C# lub Visual Basic .NET. Wywołaj metody z przestrzeni nazw System.IO.

Przykład: migrowanie plików z systemu plików do tabeli FileTable

W tym scenariuszu pliki są przechowywane w systemie plików i masz tabelę metadanych w programie SQL Server, która zawiera wskaźniki do plików. Chcesz przenieść pliki do FileTable, a następnie zastąpić oryginalną ścieżkę UNC każdego pliku w metadanych ścieżką UNC FileTable. Funkcja GetPathLocator pomaga osiągnąć ten cel.

W tym przykładzie przyjęto założenie, że istnieje tabela bazy danych, PhotoMetadata, która zawiera dane dotyczące zdjęć. Ta tabela zawiera kolumnę UNCPath typu varchar(512) zawierającą rzeczywistą ścieżkę UNC do pliku .jpg.

Aby przeprowadzić migrację plików obrazów z systemu plików do tabeli FileTable, należy wykonać następujące czynności:

  1. Utwórz nową tabelę FileTable do przechowywania plików. W tym przykładzie użyto nazwy tabeli dbo.PhotoTable, ale nie pokazano kodu do utworzenia tabeli.

  2. Użyj xcopy lub podobnego narzędzia, aby skopiować pliki .jpg ze strukturą katalogów do katalogu głównego tabeli FileTable.

  3. Napraw metadane w tabeli PhotoMetadata, używając kodu podobnego do poniższego przykładu:

--  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);

Zbiorcze ładowanie plików do tabeli FileTable

Tabela FileTable zachowuje się jak zwykła tabela dla operacji zbiorczych. Tabela Plików ma ograniczenia zdefiniowane przez system, które zapewniają zachowanie integralności przestrzeni nazw plików i katalogów. Te ograniczenia muszą zostać zweryfikowane w danych załadowanych zbiorczo do tabeli FileTable. Ponieważ niektóre operacje wstawiania zbiorczego zezwalają na ignorowanie ograniczeń tabeli, są wymuszane następujące wymagania.

  • Operacje ładowania zbiorczego, które wymuszają ograniczenia, mogą być uruchamiane względem tabeli FileTable, tak jak w przypadku każdej innej tabeli. Ta kategoria obejmuje następujące operacje:

    • bcp z klauzulą CHECK_CONSTRAINTS.
    • BULK INSERT z klauzulą CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) bez klauzuli IGNORE_CONSTRAINTS.
  • Operacje ładowania zbiorczego, które nie wymuszają ograniczeń, kończą się niepowodzeniem, chyba że ograniczenia zdefiniowane przez system fileTable są wyłączone. Ta kategoria obejmuje następujące operacje:

    • bez klauzuli CHECK_CONSTRAINTS.
    • BULK INSERT bez klauzuli CHECK_CONSTRAINTS.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) z klauzulą IGNORE_CONSTRAINTS.

Instrukcje: zbiorcze ładowanie plików do tabeli FileTable

Za pomocą różnych metod można zbiorczo ładować pliki do tabeli FileTable:

Wywołaj z klauzulą CHECK_CONSTRAINTS.

Wyłącz przestrzeń nazw FileTable i wykonaj wywołanie bez klauzuli CHECK_CONSTRAINTS. Następnie ponownie włącz przestrzeń nazw FileTable.

Aby uzyskać informacje na temat wyłączania ograniczeń tabeli plików, zobacz Manage FileTables.

Instrukcje: wyłączanie ograniczeń tabeli plików na potrzeby ładowania zbiorczego

Aby zbiorczo załadować pliki do tabeli FileTable bez konieczności wymuszania ograniczeń zdefiniowanych przez system, można tymczasowo wyłączyć ograniczenia. Aby uzyskać więcej informacji, zobacz Manage FileTables.