выполнить загрузку файлов в таблицу FileTables

Применимо к:SQL Server

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

загрузить или перенести файлы в таблицу FileTable

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

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

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

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

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

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

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

Практическое руководство. Загрузка файлов в таблицу 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. Для копирования JPG-файлов с их структурой каталогов в корневой каталог таблицы FileTable можно использовать программу xcopy или аналогичное средство.

  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.

  • BULK INSERT

    • Вызвать с предложением 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-интерфейсов ввода-вывода файлов