Gestion des données FILESTREAM par le biais de Transact-SQL

Cette rubrique explique comment utiliser les instructions Transact-SQL INSERT, UPDATE et DELETE pour gérer des données FILESTREAM.

[!REMARQUE]

Les exemples dans cette rubrique requièrent la base de données compatible FILESTREAM et la table qui sont créées dans Procédure : créer une base de données compatible FILESTREAM et Procédure : créer une table pour stocker des données FILESTREAM.

Insertion d'une ligne qui contient des données FILESTREAM

Pour ajouter une ligne à une table prenant en charge les données FILESTREAM, utilisez l'instruction Transact-SQL INSERT. Lorsque vous insérez des données dans une colonne FILESTREAM, vous pouvez insérer une valeur NULL ou varbinary(max).

Insertion de NULL

L'exemple suivant montre comment insérer NULL. Lorsque la valeur FILESTREAM est NULL, le Moteur de base de données ne crée pas de fichier dans le système de fichiers.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 1, NULL);
GO

Insertion d'un enregistrement de longueur nulle

L'exemple suivant illustre l'utilisation de INSERT pour créer un enregistrement de longueur nulle. C'est utile lorsque vous souhaitez obtenir un descripteur de fichier, mais que vous manipulerez le fichier en utilisant des API Win32.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 2, 
      CAST ('' as varbinary(max)));
GO

Création d'un fichier de données

L'exemple suivant illustre l'utilisation de INSERT pour créer un fichier contenant des données. Le Moteur de base de données convertit la chaîne Seismic Data en valeur varbinary(max). FILESTREAM crée le fichier Windows s'il n'existe pas déjà. Les données sont ensuite ajoutées au fichier de données.

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 3, 
      CAST ('Seismic Data' as varbinary(max)));
GO

Lorsque vous sélectionnez toutes les données de la table Archive.dbo.Records, les résultats sont semblables à ceux affichés dans la table suivante. Toutefois, la colonne Id contiendra des GUID différents.

Id

SerialNumber

Resume

C871B90F-D25E-47B3-A560-7CC0CA405DAC

1

NULL

F8F5C314-0559-4927-8FA9-1535EE0BDF50

2

0x

7F680840-B7A4-45D4-8CD5-527C44D35B3F

3

0x536569736D69632044617461

Mise à jour de données FILESTREAM

Vous pouvez utiliser Transact-SQL pour mettre à jour les données dans le fichier de système de fichiers, bien que cela soit plutôt déconseillé lorsque vous devez transmettre en continu de gros volumes de données.

L'exemple suivant remplace tout texte dans l'enregistrement de fichier par le texte Xray 1.

UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' as varbinary(max))
WHERE [SerialNumber] = 2;

Suppression de données FILESTREAM

Lorsque vous supprimez une ligne qui contient un champ FILESTREAM, vous supprimez également ses fichiers de système de fichiers sous-jacents. La seule façon de supprimer une ligne, et par conséquent le fichier, consiste à utiliser l'instruction Transact-SQL DELETE.

L'exemple suivant montre comment supprimer une ligne et les fichiers de système de fichiers qui lui sont associés.

DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO

Lorsque vous sélectionnez toutes les données de la table dbo.Archive, la ligne disparaît. Vous ne pouvez plus utiliser le fichier associé.

[!REMARQUE]

Les fichiers sous-jacents sont supprimés par le garbage collector FILESTREAM.