Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает процедуру загрузки или переноса файлов в таблицы 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, необходимо выполнить следующие действия:
Создайте новую таблицу 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.
ВСТАВИТЬ В ... 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-интерфейсов ввода-вывода файлов