выполнить загрузку файлов в таблицу FileTables
Описывает процедуру загрузки или переноса файлов в таблицы 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, нужно выполнить следующие действия.
Создайте новую таблицу FileTable для хранения файлов. В этом примере используется имя таблицы
dbo.PhotoTable
, но не показан код для создания самой таблицы.Для копирования JPG-файлов с их структурой каталогов в корневой каталог таблицы FileTable можно использовать программу xcopy или аналогичное средство.
Исправьте метаданные в таблице
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
Доступ к таблицам FileTable с помощью API-интерфейсов ввода-вывода файлов