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