Partager via


Créer, modifier ou supprimer un FileTable

S’applique à :SQL Server

Décrit la procédure de création d'un nouveau FileTable, ou de modification ou de suppression d'un FileTable existant.

Créer un FileTable

Un FileTable est une table utilisateur spécialisée qui a un schéma prédéfini et fixe. Ce schéma stocke des données FILESTREAM, des informations de répertoire et de fichier, ainsi que des attributs de fichier. Pour plus d'informations sur le schéma de FileTable, consultez FileTable Schema.

Vous pouvez créer un FileTable à l’aide de Transact-SQL ou de SQL Server Management Studio. Étant donné qu’un FileTable a un schéma fixe, vous n’avez pas besoin de spécifier une liste de colonnes. La syntaxe simple pour créer un FileTable vous permet de spécifier :

  • Un nom de répertoire. Dans la hiérarchie des dossiers FileTable, ce répertoire de niveau table devient l'enfant du répertoire de base de données spécifié au niveau de la base de données, et le parent des fichiers ou répertoires stocké dans la table.

  • Nom du classement à utiliser pour les noms de fichiers dans la Name colonne du FileTable.

  • Noms à utiliser pour les 3 contraintes uniques et de clé primaire qui sont créées automatiquement.

Créer un FileTable avec Transact-SQL

Créez un FileTable en appelant l’instruction CREATE TABLE avec l’option AS FILETABLE . Étant donné qu’un FileTable a un schéma fixe, vous n’avez pas besoin de spécifier une liste de colonnes. Vous pouvez spécifier les paramètres suivants pour le nouveau FileTable :

  1. FILETABLE_DIRECTORY. Spécifie le répertoire qui sert de répertoire racine à tous les fichiers et répertoires stockés dans le FileTable. Ce nom doit être unique parmi tous les noms de répertoire FileTable de la base de données. La comparaison d'unicité n'est pas sensible à la casse, indépendamment des paramètres de classement actuels.

    • Cette valeur a un type de données nvarchar(255) et utilise un classement fixe de Latin1_General_CI_AS_KS_WS.

    • Le nom de répertoire que vous fournissez doit se conformer aux configurations requises du système de fichiers concernant les noms de répertoire valides.

    • Ce nom doit être unique parmi tous les noms de répertoire FileTable de la base de données. La comparaison d'unicité n'est pas sensible à la casse, indépendamment des paramètres de classement actuels.

    • Si vous ne fournissez pas de nom de répertoire lorsque vous créez le FileTable, le nom du FileTable lui-même est utilisé comme nom de répertoire.

  2. FILETABLE_COLLATE_FILENAME. Spécifie le nom du classement à appliquer à la Name colonne du FileTable.

    1. Le classement spécifié ne doit pas être sensible à la casse pour des raisons de conformité avec la sémantique de nom de fichier Windows.

    2. Si vous ne fournissez pas de valeur pour FILETABLE_COLLATE_FILENAME, ou si vous spécifiez database_default, la colonne hérite du classement de la base de données active. Si le classement actuel de la base de données est sensible à la casse, une erreur est générée et l’opération CREATE TABLE échoue.

  3. Vous pouvez également spécifier les noms à utiliser pour les 3 contraintes uniques et de clé primaire qui sont créées automatiquement. Si vous ne fournissez pas de noms, le système génère des noms comme décrit plus loin dans cet article.

    • FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
    • FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
    • FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME

Examples

L’exemple suivant crée un FileTable et spécifie des valeurs définies par l’utilisateur pour les deux FILETABLE_DIRECTORY et FILETABLE_COLLATE_FILENAME.

CREATE TABLE DocumentStore AS FILETABLE
WITH (
    FILETABLE_DIRECTORY = 'DocumentTable',
    FILETABLE_COLLATE_FILENAME = database_default
);
GO

L'exemple suivant crée également un nouveau FileTable. Étant donné que les valeurs définies par l’utilisateur ne sont pas spécifiées, la valeur de FILETABLE_DIRECTORY devient le nom de FileTable, la valeur de FILETABLE_COLLATE_FILENAME devient database_default, et la clé primaire et les contraintes uniques reçoivent des noms générés par le système.

CREATE TABLE DocumentStore AS FILETABLE;
GO

Créer un FileTable avec SQL Server Management Studio

Dans l’Explorateur d’objets, développez les objets sous la base de données sélectionnée, cliquez avec le bouton droit sur le dossier Tables , puis sélectionnez Nouveau FileTable.

Cette option ouvre une nouvelle fenêtre de script, qui contient un modèle de script Transact-SQL que vous pouvez personnaliser et exécuter pour créer un FileTable. Utilisez l'option Spécifier les valeurs des paramètres du modèle dans le menu Requête pour personnaliser le script facilement.

Conditions requises et restrictions pour la création d’un FileTable

  • Vous ne pouvez pas modifier une table existante pour la convertir en FileTable.

  • Le répertoire parent précédemment spécifié au niveau de la base de données doit avoir une valeur non Null. Pour plus d’informations sur la spécification du répertoire au niveau de la base de données, consultez Activer les prérequis pour FileTable.

  • Puisqu'un FileTable contient une colonne FILESTREAM, un FileTable requiert un groupe de fichiers FILESTREAM valide. Vous pouvez éventuellement spécifier un groupe de fichiers FILESTREAM valide dans le cadre de la CREATE TABLE commande permettant de créer un FileTable. Si vous ne spécifiez pas de groupe de fichiers, fileTable utilise le groupe de fichiers FILESTREAM par défaut pour la base de données. Si la base de données n’a pas de groupe de fichiers FILESTREAM, une erreur est générée.

  • Vous ne pouvez pas créer de contrainte de table dans le cadre d’une CREATE TABLEinstruction ...AS FILETABLE Toutefois, vous pouvez ajouter la contrainte ultérieurement à l’aide d’une ALTER TABLE instruction.

  • Vous ne pouvez pas créer un FileTable dans la tempdb base de données ou dans l’une des autres bases de données système.

  • Vous ne pouvez pas créer un FileTable en tant que table temporaire.

Modifier un FileTable

Étant donné qu’un FileTable a un schéma prédéfini et fixe, vous ne pouvez pas ajouter ni modifier ses colonnes. Toutefois, vous pouvez ajouter des index personnalisés, des déclencheurs, des contraintes et d'autres options à un FileTable.

Pour plus d’informations sur l’utilisation de l’instruction ALTER TABLE pour activer ou désactiver l’espace de noms FileTable, y compris les contraintes définies par le système, consultez Gérer les FileTables.

Modifier le répertoire d’un FileTable à l’aide de Transact-SQL

Appelez l’instruction ALTER TABLE et fournissez une nouvelle valeur valide pour l’option SET .FILETABLE_DIRECTORY

Example

ALTER TABLE filetable_name SET (FILETABLE_DIRECTORY = N'directory_name');
GO

Modifier le répertoire d’un FileTable à l’aide de SQL Server Management Studio

Dans l’Explorateur d’objets, cliquez avec le bouton droit sur le FileTable et sélectionnez Propriétés pour ouvrir la boîte de dialogue Propriétés d’une table . Dans la page FileTable , entrez la valeur pour Nom du répertoire FileTable.

Conditions requises et restrictions pour la modification d’un FileTable

  • Vous ne pouvez pas modifier la valeur de FILETABLE_COLLATE_FILENAME.

  • Vous ne pouvez pas modifier, supprimer ou désactiver les colonnes définies par le système d’un FileTable.

  • Vous ne pouvez pas ajouter de nouvelles colonnes utilisateur, des colonnes calculées ou des colonnes calculées persistantes à un FileTable.

Supprimer un FileTable

Vous pouvez supprimer un FileTable à l’aide de la syntaxe ordinaire de l’instruction DROP TABLE .

Lorsque vous supprimez un FileTable, les objets suivants sont également supprimés :

  • Toutes les colonnes du FileTable et tous les objets associés à la table, tels que les index, les contraintes et les déclencheurs, sont également supprimés.

  • Le répertoire FileTable et les sous-répertoires qu’il contenait disparaissent de la hiérarchie de fichiers et de répertoires FILESTREAM de la base de données.

La DROP TABLE commande échoue s’il existe des handles de fichiers ouverts dans l’espace de noms de fichier de FileTable. Pour plus d’informations sur la fermeture de descripteurs ouverts, consultez Gérer des FileTables.

D’autres objets de base de données sont créés lorsque vous créez un FileTable

Lorsque vous créez un nouveau FileTable, quelques contraintes et index définis par le système sont également créés. Vous ne pouvez pas modifier ou supprimer ces objets ; ils disparaissent uniquement lorsque le FileTable lui-même est supprimé. Pour afficher la liste de ces objets, interrogez l’affichage catalogue 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

Index créés lors de la création d’un FileTable

Lorsque vous créez un FileTable, les index définis par le système suivants sont également créés :

Colonnes Type d’index Clustered
[path_locator] ASC Clé primaire Non
[parent_path_locator] ASC, [name] ASC Unique Non
[stream_id] ASC Unique Non

Contraintes créées lors de la création d’un FileTable

Lorsque vous créez un FileTable, les contraintes définies par le système suivantes sont également créées :

Contraintes Applique
Contraintes par défaut sur les colonnes suivantes :

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
Les contraintes par défaut définies par le système appliquent les valeurs par défaut pour les colonnes spécifiées.
Contraintes de validation Les contraintes de validation définies par le système appliquent les spécifications requises suivantes :

Noms de fichier valides.
Attributs de fichier valides.
L'objet parent doit être un répertoire.
La hiérarchie d'espace de noms est verrouillée pendant la manipulation de fichier.

Convention d’affectation de noms pour les contraintes définies par le système

Les contraintes définies par le système décrites précédemment sont nommées au format <constraintType>_<tablename>[_<columnname>]_<uniquifier> où :

  • '<constraint_type> est CK (contrainte de vérification), DF (contrainte par défaut), FK (clé étrangère), PK (clé primaire) ou UQ (contrainte unique).

  • <uniquifier> est une chaîne générée par le système pour rendre le nom unique. Cette chaîne peut contenir le nom fileTable et un identificateur unique.