Загрузка файлов в FileTables

Область применения: SQL Server

Описывает процедуру загрузки или переноса файлов в таблицы FileTable.

Загрузка или перенос файлов в FileTable

Выбор метода загрузки или переноса файлов в таблицу FileTable зависит от того, где хранятся файлы в настоящее время.

Текущее местоположение файлов Параметры для переноса
Файлы в настоящее время хранятся в файловой системе.

SQL Server не знает о файлах.
Поскольку таблица FileTable в файловой системе Windows отображается в виде папки, можно легко загрузить файлы в новую таблицу FileTable любым из доступных способов перемещения или копирования файлов. К этим методам относятся проводник Windows, параметры командной строки, включая xcopy и robocopy, а также пользовательские скрипты или приложения.

Нельзя преобразовать существующую папку в файл.
Файлы в настоящее время хранятся в файловой системе.

SQL Server содержит таблицу метаданных, содержащих указатели на файлы.
Сначала нужно переместить или скопировать файлы одним из способов, описанных выше.

Затем нужно обновить существующую таблицу метаданных, чтобы они указывали на новое расположение файлов.

Дополнительные сведения см . в разделе "Пример. Перенос файлов из файловой системы в файловую таблицы " в этой статье.

Практическое руководство. Загрузка файлов в fileTable

Ниже перечислены методы, которые можно использовать для загрузки файлов в таблицу FileTable.

  • Перетаскивание файлов из исходной папки в новую папку FileTable в проводнике Windows.

  • Используйте такие параметры командной строки, как move, copyxcopyили из командной строки или robocopy в пакетном файле или скрипте.

  • Напишите пользовательское приложение для перемещения или копирования файлов в C# или Visual Basic .NET. Вызов методов из System.IO пространства имен.

Пример. Перенос файлов из файловой системы в FileTable

В этом сценарии файлы хранятся в файловой системе, а в SQL Server есть таблица метаданных, содержащая указатели на файлы. Необходимо переместить файлы в таблицу FileTable, затем заменить исходный путь UNC для каждого файла в метаданных на путь UNC таблицы FileTable. Функция GetPathLocator помогает достичь этой цели.

В этом примере предположим, что существует существующая таблица базы данных, PhotoMetadataсодержащая данные о фотографиях. Эта таблица содержит столбец UNCPath типа varchar(512), содержащий фактический UNC-путь к файлу .jpg .

Чтобы перенести файлы изображений из файловой системы в таблицу FileTable, нужно выполнить указанные ниже действия.

  1. Создайте новую таблицу FileTable для хранения файлов. В этом примере используется имя таблицы, dbo.PhotoTableно код не отображается для создания таблицы.

  2. Используйте xcopy или аналогичное средство для копирования .jpg файлов с их структурой каталогов в корневой каталог FileTable.

  3. Исправьте метаданные в PhotoMetadata таблице с помощью кода, аналогичного следующему примеру:

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

Массовая загрузка файлов в fileTable

Таблица FileTable работает как обычная таблица для массовых операций. Таблица FileTable имеет системные ограничения, гарантирующие целостность пространства имен файлов и каталогов. Эти ограничения должны быть проверены на массовых данных, загружаемых в FileTable. Так как часть операций массовой вставки разрешает игнорировать табличные ограничения, следующие меры применяются принудительно.

  • В настоящее время операции массовой загрузки в таблицу FileTable, принудительно применяющие ограничения, можно выполнять, как с любой другой таблицей. В эту категорию входят следующие операции:

    • bcp с CHECK_CONSTRAINTS предложением.
    • BULK INSERT с CHECK_CONSTRAINTS предложением.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) без IGNORE_CONSTRAINTS предложения.
  • Операции массовой загрузки, которые не применяют ограничения, завершаются ошибкой, если не отключены системные ограничения FileTable. В эту категорию входят следующие операции:

    • bcp без CHECK_CONSTRAINTS предложения.
    • BULK INSERT без CHECK_CONSTRAINTS предложения.
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) с IGNORE_CONSTRAINTS предложением.

Практическое руководство. Массовая загрузка файлов в FileTable

Для массовой загрузки файлов в таблицу FileTable можно использовать различные способы.

Вызов предложения CHECK_CONSTRAINTS .

Отключите пространство имен FileTable и вызов без CHECK_CONSTRAINTS предложения. Затем снова включить пространство имен FileTable.

Сведения об отключении ограничений FileTable см. в разделе Управление таблицами FileTable.

Практическое руководство. Отключение ограничений FileTable для массовой загрузки

Для массовой загрузки файлов в таблицу FileTable без издержек по применению определенных в системе ограничений, можно временно отключить ограничения. Дополнительные сведения см. в статье Управление таблицами FileTable.