Поделиться через


Работа с каталогами и путями в таблицах FileTable

Описывает структуру каталогов, в которой файлы хранятся в таблицах FileTable.

В этом разделе

Необходимо...

  • Работа с каталогами и путями в таблицах FileTable

  • Использование относительных путей для переносимого кода

Дополнительные сведения

  • Важные ограничения

    • Уровень вложенности

    • Длина полного имени

  • Полный путь к элементу, хранящемуся в таблице FileTable

  • Семантика корневых каталогов на уровне экземпляра, базы данных и таблицы FileTable

  • Столбец is_directory в схеме FileTable

  • Использование имен виртуальной сети для групп доступности AlwaysOn

Как работать с каталогами и путями в таблицах FileTable

Следующие 3 функции можно использовать для работы с каталогами FileTable в Transact-SQL:

Чтобы получить этот результат, выполните следующее.

Воспользуйтесь этой функцией

Получите корневой путь UNC для конкретной таблицы FileTable или для текущей базы данных.

FileTableRootPath (Transact-SQL)

Получите абсолютный или относительный путь UNC к файлу или каталогу в таблице FileTable.

GetFileNamespacePath (Transact-SQL)

Получите значение идентификатора path_locator для заданного файла или каталога в таблице FileTable, указав путь к нему.

GetPathLocator (Transact-SQL)

[В НАЧАЛО]

Как использовать относительные пути для переносимого кода

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

  1. Общий ресурс с поддержкой доступа файлового ввода-вывода к данным FILESTREAM на уровне экземпляра SQL Server.

  2. Имя_каталога на уровне базы данных.

  3. 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-интерфейсов файла ввода-вывода