Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

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

  • Используйте такие параметры командной строки, как MOVE, COPY, XCOPY или ROBOCOPY из командной строки или пакетного файла или скрипта.

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

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

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

В этом примере предположим, что существует существующая таблица базы данных, 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.

    • ВСТАВИТЬ В ... SELECT * FROM OPENROWSET(BULK ...) без использования IGNORE_CONSTRAINTS.

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

    • bcp без клаузы CHECK_CONSTRAINTS.

    • BULK INSERT без оператора CHECK_CONSTRAINTS.

    • ВСТАВКА В ... SELECT * FROM OPENROWSET(BULK ...) с предложением IGNORE_CONSTRAINTS.

Как: Массовая загрузка файлов в FileTable

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

  • bcp

    • Вызов с конструкцией CHECK_CONSTRAINTS.

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

  • ОПЕРАЦИЯ МАССОВОЙ ВСТАВКИ

    • Вызов с условием CHECK_CONSTRAINTS.

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

  • ВСТАВКА В ... SELECT * FROM OPENROWSET(BULK ...)

    • Вызов с условием IGNORE_CONSTRAINTS.

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

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

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

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

См. также

Доступ к таблицам FileTable с помощью Transact-SQL
Доступ к таблицам FileTable с помощью API-интерфейсов ввода-вывода файлов