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


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

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

В этом разделе

Необходимо...

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

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

    • Пример: перенос файлов из файловой системы в таблицу FileTable

  • Массовая загрузка файлов в таблицу FileTable

    • Как выполнить массовую загрузку файлов в таблицу FileTable

    • Как отключить ограничения FileTable для массовой загрузки

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

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

Текущее местоположение файлов

Параметры для переноса

Файлы в настоящее время хранятся в файловой системе.

SQL Server не имеет сведений о файлах.

Поскольку таблица FileTable в файловой системе Windows отображается в виде папки, можно легко загрузить файлы в новую таблицу FileTable любым из доступных способов перемещения или копирования файлов. Это может быть проводник Windows, программы командной строки, включая 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;

    • 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 можно использовать различные способы.

  • bcp

    • Вызвать с предложением CHECK_CONSTRAINTS.

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

  • BULK INSERT

    • Вызвать с предложением CHECK_CONSTRAINTS.

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

  • INSERT INTO … SELECT * FROM OPENROWSET(BULK …)

    • Вызвать с предложением IGNORE_CONSTRAINTS.

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

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

[В начало]

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

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

[В начало]

См. также

Основные понятия

Доступ к таблицам FileTable с помощью Transact-SQL

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