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


Создание, изменение или удаление таблицы FileTable

Область применения:SQL Server

Описывает способы создания новых таблиц FileTable и изменения или удаления существующих таблиц FileTable.

Создание таблицы FileTable

FileTable — это специализированная пользовательская таблица, которая имеет предопределенную и фиксированную схему. Эта схема содержит данные FILESTREAM, сведения о файлах и каталогах и атрибуты файлов. Сведения о данном образце схемы см. в разделе FileTable Schema.

Вы можете создать новую таблицы FileTable с помощью Transact-SQL или SQL Server Management Studio. Так как fileTable имеет фиксированную схему, вам не нужно указывать список столбцов. Простой синтаксис для создания таблицы FileTable позволяет указать следующее:

  • Имя каталога. В иерархии папок FileTable этот каталог уровня таблицы становится дочерним для каталога базы данных, указанного на уровне базы данных, и родительским для файлов или каталогов, хранящихся в таблице.

  • Имя параметров сортировки, используемых для имен файлов в столбце Name FileTable.

  • Можно также указать имена, предназначенные для использования в трех первичных ключах и ограничениях уникальности, создаваемых автоматически.

Создание таблицы FileTable с помощью Transact-SQL

Создайте таблицу FileTable, вызвав инструкцию CREATE TABLE с параметром AS FILETABLE . Так как fileTable имеет фиксированную схему, вам не нужно указывать список столбцов. Можно указать следующие параметры для новой FileTable:

  1. FILETABLE_DIRECTORY. Указывает каталог, выполняющий функции корневого каталога для всех файлов и каталогов, хранящихся в FileTable. Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных. Проверка уникальности выполняется без учета регистра, независимо от текущих параметров сортировки.

    • Это значение имеет тип данных nvarchar(255) и использует фиксированную настройку сортировки Latin1_General_CI_AS_KS_WS.

    • Указываемое имя каталога должно соответствовать требованиям файловой системы для допустимых имен каталогов.

    • Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных. Проверка уникальности выполняется без учета регистра, независимо от текущих параметров сортировки.

    • Если при создании таблицы FileTable не указано имя каталога, имя самой таблицы FileTable используется в качестве имени каталога.

  2. FILETABLE_COLLATE_FILENAME. Указывает имя параметров сортировки, применяемых к Name столбцу в FileTable.

    1. Указанные параметры сортировки должны быть нечувствительны к регистру , чтобы соответствовать семантике имен файлов Windows.

    2. Если значение не задано для FILETABLE_COLLATE_FILENAME, или если указано database_default, столбец наследует параметры сопоставления текущей базы данных. Если текущая сортировка базы данных чувствительна к регистру, возникает ошибка, и операция CREATE TABLE не выполняется.

  3. Можно также указать имена, предназначенные для использования в трех первичных ключах и ограничениях уникальности, создаваемых автоматически. Если вы не предоставляете имена, система создает имена, как описано далее в этой статье.

    • 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 с помощью Transact-SQL

Вызовите инструкцию ALTER TABLE и укажите допустимое новое значение для SET параметра FILETABLE_DIRECTORY.

Example

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 .

При удалении таблицы FileTable также удаляются следующие объекты:

  • Все столбцы и объекты, связанные с таблицей, например индексы, ограничения и триггеры также удаляются.

  • Каталог FileTable и вложенные каталоги, содержащиеся в ней, исчезают из файлов FILESTREAM и иерархии каталогов базы данных.

Команда завершается ошибкой DROP TABLE, если в пространстве имен FileTable есть открытые дескрипторы файлов. Сведения о закрытии открытых дескрипторов см. в разделе Управление объектами FileTable.

Другие объекты базы данных создаются при создании таблицы FileTable

При создании новой таблицы FileTable также создаются некоторые системные индексы и ограничения. Невозможно изменить или удалить эти объекты; они исчезают только при удалении самой таблицы FileTable. Чтобы просмотреть список этих объектов, отправьте запрос к представлению каталога sys.filetable_system_defined_objects.

--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 также создаются следующие системные индексы.

Столбцы Тип индекса Clustered
[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
Системные ограничения по умолчанию используют значения по умолчанию для указанных столбцов.
Проверочные ограничения Системные проверочные ограничения обеспечивают следующие требования.

Допустимые имена файлов.
Допустимые атрибуты файлов.
Родительский объект должен быть каталогом.
При обработке файла иерархия пространств имен заблокирована.

Правила именования для ограничений, определённых системой

Системные ограничения, описанные ранее, называются в формате <constraintType>_<tablename>[_<columnname>]_<uniquifier> , в котором:

  • "<constraint_type> является CK (контрольное ограничение), DF (ограничение по умолчанию), FK (внешний ключ), PK (первичный ключ) или UQ (уникальное ограничение).

  • <uniquifier> — это созданная системой строка для уникального имени. Эта строка может содержать имя FileTable и уникальный идентификатор.