Работа с каталогами и путями в таблицах FileTable
Описывает структуру каталогов, в которой файлы хранятся в таблицах FileTable.
В этом разделе
Необходимо...
Работа с каталогами и путями в таблицах FileTable
Использование относительных путей для переносимого кода
Дополнительные сведения
Важные ограничения
Уровень вложенности
Длина полного имени
Полный путь к элементу, хранящемуся в таблице FileTable
Семантика корневых каталогов на уровне экземпляра, базы данных и таблицы FileTable
Столбец is_directory в схеме FileTable
Использование имен виртуальной сети для групп доступности AlwaysOn
Как работать с каталогами и путями в таблицах FileTable
Следующие 3 функции можно использовать для работы с каталогами FileTable в Transact-SQL:
Чтобы получить этот результат, выполните следующее. |
Воспользуйтесь этой функцией |
---|---|
Получите корневой путь UNC для конкретной таблицы FileTable или для текущей базы данных. |
|
Получите абсолютный или относительный путь UNC к файлу или каталогу в таблице FileTable. |
|
Получите значение идентификатора path_locator для заданного файла или каталога в таблице FileTable, указав путь к нему. |
[В НАЧАЛО]
Как использовать относительные пути для переносимого кода
Чтобы код и приложения были независимы от текущего компьютера и базы данных, следует избегать создания кода с использованием абсолютных путей. Вместо этого рекомендуется получать полный путь к файлу во время выполнения с помощью функций FileTableRootPath (Transact-SQL) и GetFileNamespacePath (Transact-SQL), как показано в следующем примере. По умолчанию функция GetFileNamespacePath возвращает относительный путь к файлу, находящемуся внутри корневого пути к базе данных.
USE database_name;
DECLARE @root nvarchar(100);
DECLARE @fullpath nvarchar(1000);
SELECT @root = FileTableRootPath();
SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';
PRINT @fullpath;
GO
[В начало]
Важные ограничения
Уровень вложенности
![]() |
---|
Нельзя хранить более 15 уровней вложенных каталогов в каталоге FileTable. Если сохранено 15 уровней вложенных каталогов, каталог самого нижнего уровня не сможет содержать файлы, так как эти файлы представляют собой дополнительный уровень. |
Длина полного имени
![]() |
---|
Файловая система NTFS поддерживает пути, намного превышающие ограничение в 260 символов, установленное в оболочке Windows и большинстве других функций Windows API. Поэтому можно создавать файлы в файловой иерархии FileTable с помощью Transact-SQL, которые нельзя будет просмотреть или открыть в Проводнике Windows и многих других приложениях Windows, поскольку полный путь превышает 260 символов. Однако с этими файлами вы можете продолжать работать с помощью инструкций Transact-SQL. |
Полный путь к элементу, хранящемуся в таблице FileTable
Полный путь к файлу или каталогу, сохраненный в таблице FileTable, начинается со следующих элементов.
Общий ресурс с поддержкой доступа файлового ввода-вывода к данным FILESTREAM на уровне экземпляра SQL Server.
Имя_каталога на уровне базы данных.
FILETABLE_DIRECTORY на уровне таблицы FileTable.
В итоге иерархия выглядит следующим образом.
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\
Данная иерархия каталогов образует корень пространства имен FileTable. В этой иерархии каталогов данные FILESTREAM для FileTable хранятся в виде файлов и в виде вложенных каталогов, которые также могут содержать файлы и вложенные каталоги.
Важно иметь в виду, что иерархия каталогов, созданная в общем ресурсе FILESTREAM на уровне экземпляра, является виртуальной иерархией каталогов. Иерархия хранится в базе данных SQL Server и не представлена физически в файловой системе NTFS. Все операции, осуществляющие доступ к файлам и каталогам в общем ресурсе FILESTREAM в таблицах FileTable, перехватываются и обрабатываются компонентом SQL Server, внедренным в файловую систему.
[В НАЧАЛО]
Семантика корневых каталогов на уровне экземпляра, базы данных и таблицы FileTable
Эта иерархия каталогов имеет следующую семантику.
Общий ресурс FILESTREAM на уровне экземпляра настраивается администратором и хранится в виде свойства сервера. Этот общий ресурс можно переименовать с помощью диспетчера конфигурации SQL Server. Операция переименования вступает в силу только после перезапуска сервера.
Уровень базы данных DIRECTORY_NAME при создании новой базы данных по умолчанию имеет значение null. Администратор может задать или изменить это имя с помощью инструкции ALTER DATABASE. Это имя должно быть уникальным (при сравнении без учета регистра) в этом экземпляре.
Обычно имя FILETABLE_DIRECTORY указывается в составе инструкции CREATE TABLE при создании таблицы FileTable. Это имя можно изменить с помощью команды ALTER TABLE.
Эти корневые каталоги нельзя переименовать с помощью операций файлового ввода-вывода.
Эти корневые каталоги нельзя открыть с использованием дескрипторов файлов для монопольного доступа.
[В НАЧАЛО]
Столбец is_directory в схеме FileTable
В следующей таблице описывается взаимодействие между столбцом is_directory и столбцом file_stream, в котором находятся данные FILESTREAM в таблице FileTable.
is_directory: значение |
file_stream: значение |
Поведение |
FALSE |
NULL |
Это недопустимое сочетание, которое будет перехвачено системным ограничением. |
FALSE |
<value> |
Этот элемент представляет файл. |
TRUE |
NULL |
Этот элемент представляет каталог. |
TRUE |
<value> |
Это недопустимое сочетание, которое будет перехвачено системным ограничением. |
[В начало]
Использование имен виртуальной сети для групп доступности AlwaysOn
Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит группе доступности:
Функции FILESTREAM и FileTable принимают или возвращают имена виртуальной сети, а не имена компьютеров. Дополнительные сведения об этих функциях см. в разделе Функции Filestream и FileTable (Transact-SQL).
При осуществлении любого доступа к данным FILESTREAM или FileTable посредством API-интерфейса файловой системы будут использоваться имена виртуальной сети, а не имена компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).
[В начало]
См. также
Основные понятия
Включение необходимых компонентов для таблицы FileTable
Создание, изменение и удаление таблиц FileTables
Доступ к таблицам FileTable с помощью Transact-SQL
Доступ к файлам с помощью API-интерфейсов файла ввода-вывода