5
Il est à noter que le comportement du type de données régulier varbinary (max) demeure inchangé dans
SQL Server 2008, y compris la limite de taille de 2 Go. L'ajout de l'attribut FILESTREAM rend une
colonne varbinary (max) essentiellement illimitée en taille (en réalité la taille est limitée à celle du volume
NTFS sous-jacent).
Les données FILESTREAM sont stockées dans le système de fichiers dans un ensemble de répertoires
NTFS appelés conteneurs de données, qui correspondent aux groupes de fichiers spéciaux dans la base
de données. L'accès transactionnel aux données FILESTREAM est contrôlé par SQL Server et un pilote
de filtre du système de fichiers qui est installé dans le cadre de l'activation de FILESTREAM au niveau
Windows. L'utilisation d'un pilote de filtre du système de fichiers permet également d'avoir accès
à distance aux données FILESTREAM dans un chemin d'accès UNC. SQL Server gère un lien des tris
de lignes de la table dans les fichiers FILESTREAM associés. Cela signifie que la suppression ou
l'affectation d'un nouveau nom à des fichiers FILESTREAM directement via le système de fichiers
provoque l'endommagement de la base de données.
L'utilisation de FILESTREAM requiert plusieurs modifications de schéma apportées aux tables de données
(le plus souvent la condition que chaque ligne doit posséder un ID de ligne unique) ; elle comprend
également des restrictions lorsqu'elle est combinée avec d'autres fonctionnalités (telles que l'incapacité de
chiffrer des données FILESTREAM). Elles sont toutes décrites en détail dans la section « Configuration de
SQL Server pour FILESTREAM » plus loin dans ce livre blanc.
Les données FILESTREAM sont accessibles et manipulées de deux manières : avec le modèle de
programmation standard Transact-SQL ou via les API de diffusion en continu Win32. Les deux
mécanismes sont entièrement compatibles avec les transactions et prennent en charge la plupart des
opérations DML, notamment insertion, mise à jour, suppression et sélection. Les données FILESTREAM
sont également prises en charge pour les opérations de maintenance, telles que la sauvegarde, la
restauration et le contrôle de cohérence. L'exception principale est que les mises à jour partielles des
données FILESTREAM ne sont pas prises en charge. Toute mise à jour d'une valeur de données
FILESTREAM se traduit par la création d'une nouvelle copie du fichier de données FILESTREAM.
L'ancien fichier est supprimé de façon asynchrone, tel que le décrit la section « Configuration du garbage
collection FILESTREAM » plus loin dans ce document.
Modèle de programmation double pour accéder aux données BLOB
Une fois les données stockées dans une colonne FILESTREAM, elles sont accessibles en utilisant des
transactions Transact-SQL ou des API Win32. Cette section fournit des informations générales sur les
modèles de programmation et leur utilisation.
Accès Transact-SQL
À l'aide de Transact-SQL, les données FILESTREAM peuvent être insérées, mises à jour et supprimées,
comme suit :
Les champs FILESTREAM peuvent être préremplis à l'aide d'une opération d'insertion (avec une
valeur vide ou une petite valeur non NULL). Toutefois, une grande quantité de données est
diffusée en continu plus efficacement à l'aide des interfaces Win32.
Lorsque vous mettez à jour des données FILESTREAM, vous modifiez les données BLOB sous-
jacentes dans le système de fichiers. Lorsqu'un champ FILESTREAM a la valeur NULL, les
données BLOB associées au champ sont supprimées. Les mises à jour segmentées Transact-
SQL, implémentées comme UPDATE.Write(), ne peuvent pas être utilisées pour effectuer des
mises à jour partielles des données FILESTREAM.