Загрузка файлов в FileTables
Область применения: SQL Server
Описывает процедуру загрузки или переноса файлов в таблицы FileTable.
Загрузка или перенос файлов в FileTable
Выбор метода загрузки или переноса файлов в таблицу FileTable зависит от того, где хранятся файлы в настоящее время.
Текущее местоположение файлов | Параметры для переноса |
---|---|
Файлы в настоящее время хранятся в файловой системе. SQL Server не знает о файлах. |
Поскольку таблица FileTable в файловой системе Windows отображается в виде папки, можно легко загрузить файлы в новую таблицу FileTable любым из доступных способов перемещения или копирования файлов. К этим методам относятся проводник Windows, параметры командной строки, включая xcopy и robocopy, а также пользовательские скрипты или приложения. Нельзя преобразовать существующую папку в файл. |
Файлы в настоящее время хранятся в файловой системе. SQL Server содержит таблицу метаданных, содержащих указатели на файлы. |
Сначала нужно переместить или скопировать файлы одним из способов, описанных выше. Затем нужно обновить существующую таблицу метаданных, чтобы они указывали на новое расположение файлов. Дополнительные сведения см . в разделе "Пример. Перенос файлов из файловой системы в файловую таблицы " в этой статье. |
Практическое руководство. Загрузка файлов в fileTable
Ниже перечислены методы, которые можно использовать для загрузки файлов в таблицу FileTable.
Перетаскивание файлов из исходной папки в новую папку FileTable в проводнике Windows.
Используйте такие параметры командной строки, как
move
,copy
xcopy
или из командной строки илиrobocopy
в пакетном файле или скрипте.Напишите пользовательское приложение для перемещения или копирования файлов в C# или Visual Basic .NET. Вызов методов из
System.IO
пространства имен.
Пример. Перенос файлов из файловой системы в FileTable
В этом сценарии файлы хранятся в файловой системе, а в SQL Server есть таблица метаданных, содержащая указатели на файлы. Необходимо переместить файлы в таблицу FileTable, затем заменить исходный путь UNC для каждого файла в метаданных на путь UNC таблицы FileTable. Функция GetPathLocator помогает достичь этой цели.
В этом примере предположим, что существует существующая таблица базы данных, PhotoMetadata
содержащая данные о фотографиях. Эта таблица содержит столбец UNCPath
типа varchar(512), содержащий фактический UNC-путь к файлу .jpg
.
Чтобы перенести файлы изображений из файловой системы в таблицу FileTable, нужно выполнить указанные ниже действия.
Создайте новую таблицу FileTable для хранения файлов. В этом примере используется имя таблицы,
dbo.PhotoTable
но код не отображается для создания таблицы.Используйте xcopy или аналогичное средство для копирования
.jpg
файлов с их структурой каталогов в корневой каталог FileTable.Исправьте метаданные в
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
предложения.
- bcp с
Операции массовой загрузки, которые не применяют ограничения, завершаются ошибкой, если не отключены системные ограничения FileTable. В эту категорию входят следующие операции:
- bcp без
CHECK_CONSTRAINTS
предложения. BULK INSERT
безCHECK_CONSTRAINTS
предложения.INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)
сIGNORE_CONSTRAINTS
предложением.
- bcp без
Практическое руководство. Массовая загрузка файлов в FileTable
Для массовой загрузки файлов в таблицу FileTable можно использовать различные способы.
Вызов предложения CHECK_CONSTRAINTS
.
Отключите пространство имен FileTable и вызов без CHECK_CONSTRAINTS
предложения. Затем снова включить пространство имен FileTable.
Сведения об отключении ограничений FileTable см. в разделе Управление таблицами FileTable.
Практическое руководство. Отключение ограничений FileTable для массовой загрузки
Для массовой загрузки файлов в таблицу FileTable без издержек по применению определенных в системе ограничений, можно временно отключить ограничения. Дополнительные сведения см. в статье Управление таблицами FileTable.