Создание, изменение и удаление таблиц FileTables
Область применения: SQL Server
Описывает способы создания новых таблиц FileTable и изменения или удаления существующих таблиц FileTable.
Создание таблицы FileTable
Таблица FileTable является специализированной пользовательской таблицей с заранее заданной и фиксированной схемой. Эта схема содержит данные FILESTREAM, сведения о файлах и каталогах и атрибуты файлов. Сведения о данном образце схемы см. в разделе FileTable Schema.
Вы можете создать новую таблицы FileTable с помощью Transact-SQL или SQL Server Management Studio. Поскольку таблица FileTable имеет фиксированную схему, нет необходимости указывать список столбцов. Простой синтаксис для создания таблицы FileTable позволяет указать следующее:
Имя каталога. В иерархии папок FileTable этот каталог уровня таблицы становится дочерним для каталога базы данных, указанного на уровне базы данных, и родительским для файлов или каталогов, хранящихся в таблице.
Имя параметров сортировки, используемое для имен файлов в столбце Name таблицы FileTable.
Можно также указать имена, предназначенные для использования в трех первичных ключах и ограничениях уникальности, создаваемых автоматически.
Практическое руководство. Создание таблицы FileTable
Создание таблицы FileTable с помощью Transact-SQL
Создайте таблицу FileTable, вызвав инструкцию CREATE TABLE (Transact-SQL) с параметром AS FileTable . Поскольку таблица FileTable имеет фиксированную схему, нет необходимости указывать список столбцов. Можно указать следующие параметры для новой FileTable:
FILETABLE_DIRECTORY. Указывает каталог, выполняющий функции корневого каталога для всех файлов и каталогов, хранящихся в FileTable. Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных. Проверка уникальности выполняется без учета регистра, независимо от текущих параметров сортировки.
Это значение имеет тип данных nvarchar(255) и использует фиксированные параметры сортировки Latin1_General_CI_AS_KS_WS.
Указываемое имя каталога должно соответствовать требованиям файловой системы для допустимых имен каталогов.
Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных. Проверка уникальности выполняется без учета регистра, независимо от текущих параметров сортировки.
Если при создании таблицы FileTable не указано имя каталога, то в качестве имени каталога используется имя самой таблицы FileTable.
FILETABLE_COLLATE_FILENAME. Указывает имя параметров сортировки, применяемых к столбцу Name в таблице FileTable.
Указанные параметры сортировки должны быть нечувствительны к регистру , чтобы соответствовать семантике имен файлов Windows.
Если для параметра FILETABLE_COLLATE_FILENAMEне указано значение или было задано значение database_default, столбец унаследует параметры сортировки текущей базы данных. Если в текущей базе данных используются параметры сортировки с учетом регистра, то операция CREATE TABLE завершится ошибкой.
Можно также указать имена, предназначенные для использования в трех первичных ключах и ограничениях уникальности, создаваемых автоматически. Если имена не будут предоставлены, то система сформирует имена, как описано ниже в этом разделе.
FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME
Примеры
В следующем примере рассмотрено создание новой таблицы FileTable с указанием значений, определяемых пользователем, для FILETABLE_DIRECTORY и FILETABLE_COLLATE_FILENAME.
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = 'DocumentTable',
FileTable_Collate_Filename = database_default
);
GO
В следующем примере также создается новый FileTable. Определяемые пользователем значения не заданы, поэтому значение FILETABLE_DIRECTORY становится именем таблицы FileTable, значение FILETABLE_COLLATE_FILENAME становится равным database_default, а первичный ключ и ограничения уникальности принимают значения, сформированные системой.
CREATE TABLE DocumentStore AS FileTable;
GO
Создание таблицы FileTable в среде SQL Server Management Studio
В обозревателе объектов разверните объекты в выбранной базе данных, затем щелкните правой кнопкой мыши папку Таблицы и выберите Создать FileTable.
Этот параметр открывает новое окно скрипта, в котором содержится шаблон скрипта Transact-SQL, который можно настроить и выполнить с целью создания таблицы FileTable. Для простой настройки скрипта используйте параметр Указать значения для параметров шаблона в меню Запрос .
Требования и ограничения для создания FileTable
Существующую таблицу невозможно изменить, преобразовав ее в таблицу FileTable.
Родительский каталог, предварительно указанный на уровне базы данных, должен иметь значение, отличное от NULL. Сведения об указании каталогов на уровне базы данных см. в разделе Включение необходимых компонентов для таблицы FileTable.
Поскольку таблица FileTable содержит столбец FILESTREAM, требуется действующая файловая группа FILESTREAM. При необходимости можно указать действующую файловую группу FILESTREAM в команде CREATE TABLE для создания таблицы FileTable. Если файловая группа не указана, то таблица FileTable использует файловую группу FILESTREAM по умолчанию для базы данных. Если база данных не содержит файловую группу FILESTREAM, то возникнет ошибка.
Невозможно создать ограничение таблицы в составе инструкции CREATE TABLE…AS FILETABLE. Однако можно добавить ограничение позже с помощью инструкции ALTER TABLE .
Невозможно создать FileTable в базе данных tempdb или любой другой системной базе данных.
Невозможно создать таблицу FileTable как временную таблицу.
изменение таблицы FileTable
Поскольку FileTable имеет предопределенную и фиксированную схему, добавлять и изменять столбцы в ней нельзя. Тем не менее в таблицу FileTable можно добавлять пользовательские индексы, триггеры, ограничения и другие параметры.
Сведения об использовании инструкции ALTER TABLE для включения или отключения пространства имен FileTable, включая системные ограничения, см. в разделе Управление объектами FileTable.
Практическое руководство. Изменение каталога для таблицы FileTable
Изменение каталога для таблицы FileTable с помощью Transact-SQL
Вызовите инструкцию ALTER TABLE и задайте новое допустимое значение параметра FILETABLE_DIRECTORY SET.
Пример
ALTER TABLE filetable_name
SET ( FILETABLE_DIRECTORY = N'directory_name' );
GO
Изменение каталога для таблицы FileTable с помощью среды SQL Server Management Studio
Щелкните правой кнопкой мыши таблицу FileTable в обозревателе объектов и выберите пункт Свойства , чтобы открыть диалоговое окно Свойства таблицы . На странице FileTable введите новое значение для свойства Имя каталога FileTable.
Требования и ограничения для изменения FileTable
Изменить значение FILETABLE_COLLATE_FILENAMEневозможно.
Нельзя изменить, удалить или отключить системные столбцы в таблице FileTable.
Нельзя добавлять новые пользовательские столбцы, вычисляемые или материализованные вычисляемые столбцы в таблицу FileTable.
удаление таблицы FileTable
Таблицу FileTable можно удалить с помощью обычного синтаксиса инструкции DROP TABLE (Transact-SQL).
При удалении таблицы FileTable также удаляются следующие объекты:
Все столбцы и объекты, связанные с таблицей, например индексы, ограничения и триггеры также удаляются.
Каталог таблицы FileTable и вложенные каталоги удаляются из файла FILESTREAM и иерархии каталогов базы данных.
Команда DROP TABLE завершается ошибкой, если в пространстве имен файлов FileTable имеются открытые дескрипторы файлов. Сведения о закрытии открытых дескрипторов см. в разделе Управление объектами FileTable.
другие объекты базы данных, создаваемые при создании таблицы FileTable
При создании новой таблицы FileTable также создаются некоторые системные индексы и ограничения. Эти объекты нельзя изменять или удалять, они исчезают только после удаления самой таблицы FileTable. Чтобы просмотреть список этих объектов, выполните запрос к представлению каталога sys.filetable_system_defined_objects (Transact-SQL).
--View all objects for all filetables, unsorted
SELECT * FROM sys.filetable_system_defined_objects;
GO
--View sorted list with friendly names
SELECT OBJECT_NAME(parent_object_id) AS 'FileTable', OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';
GO
Индексы, которые создаются при создании новой таблицы FileTable
При создании новой таблицы FileTable также создаются следующие системные индексы.
Столбцы | Тип индекса |
---|---|
[path_locator] ASC | Первичный ключ, некластеризованный |
[parent_path_locator] ASC, [name] ASC |
Уникальный, некластеризованный |
[stream_id] ASC | Уникальный, некластеризованный |
Ограничения, которые создаются при создании новой таблицы FileTable
При создании новой таблицы FileTable также создаются следующие системные ограничения.
Ограничения | Принудительно применяет |
---|---|
Ограничения по умолчанию для следующих столбцов: creation_time is_archive is_directory is_hidden is_offline is_readonly is_system is_temporary last_access_time last_write_time path_locator stream_id |
Системные ограничения по умолчанию используют значения по умолчанию для указанных столбцов. |
Проверочные ограничения | Системные проверочные ограничения обеспечивают следующие требования. Допустимые имена файлов. Допустимые атрибуты файлов. Родительский объект должен быть каталогом. При обработке файла иерархия пространств имен заблокирована. |
Соглашение об именах для системных ограничений
Системные ограничения, описанные выше, именуются в параметре <format constraintType>_<tablename[_<columnname>>]_<uniquifier>, где:
<> constraint_type — это CK (ограничение проверки), DF (ограничение по умолчанию), FK (внешний ключ), PK (первичный ключ) или UQ (уникальное ограничение).
<uniquifier> — это система, созданная системой строка для создания уникального имени. Эта строка может содержать имя таблицы FileTable и уникальный идентификатор.