Partager via


Données text, ntext et image dans les déclencheurs INSTEAD OF

Les modifications de données peuvent impliquer des colonnes text, ntext et image. Dans les tables de base, la valeur stockée dans une colonne text, ntext ou image est un pointeur de texte qui pointe vers les pages dans lesquelles figurent les données. Pour plus d'informations, consultez Données de ligne.

[!REMARQUE]

L'utilisation des données text, ntext et image n'est disponible que pour des raisons de compatibilité descendante. Il est préférable de stocker les données de grande taille à l'aide des types de données varchar(max), nvarchar(max) et varbinary(max). Les données varchar(max), nvarchar(max) et varbinary(max) contenues dans les tables inserted et deleted sont prises en charge par les déclencheurs AFTER et INSTEAD OF.

Contrairement aux déclencheurs INSTEAD OF, les déclencheurs AFTER ne prennent pas en charge les données text, ntext et image contenues dans les tables inserted et deleted. Les données text, ntext et image sont stockées dans les tables inserted et deleted d'une manière différente de celle utilisée pour le stockage des données dans les tables de base. Ces données text, ntext et image ne sont ainsi pas stockées en tant que chaîne de pages distincte, mais bien en tant que chaîne continue dans chaque ligne. En d'autres termes, il n'existe aucun pointeur de texte pour les colonnes text, ntext et image dans les tables inserted et deleted. Les fonctions TEXTPTR et TEXTVALID ainsi que les instructions READTEXT, UPDATETEXT et WRITETEXT ne peuvent pas être appliquées aux colonnes text, ntext et image d'une table inserted ou deleted. Toutes les autres utilisations des colonnes text, ntext et image sont prises en charge, comme leur référencement dans des listes de sélection, les conditions de recherche des clauses WHERE ou les fonctions SUBSTRING, PATINDEX et CHARINDEX. Les opérations sur des données text, ntext ou image dans des déclencheurs INSTEAD OF sont affectées par l'option SET TEXTSIZE en cours, dont la valeur peut être déterminée à l'aide de la fonction @@TEXTSIZE.

Le type de données text, ntext ou image stocké dans les tables inserted et deleted varie en fonction de l'action de déclenchement (INSERT, UPDATE ou DELETE) :

  • Dans le cas d'une instruction INSERT, la table inserted contient la nouvelle valeur de la colonne text, ntext ou image. Aucune ligne ne figure dans la table deleted.

  • Dans le cas d'une instruction DELETE, aucune ligne ne figure dans la table inserted et les lignes de la table deleted contiennent les valeurs que détenait la colonne text, ntext ou image avant l'exécution de l'instruction DELETE.

  • Dans le cas d'une instruction UPDATE ne modifiant pas la valeur text, ntext ou image, les lignes des tables inserted et deleted contiennent les mêmes valeurs pour la colonne text, ntext ou image.

  • Dans le cas d'une instruction UPDATE modifiant la valeur text, ntext ou image, les valeurs de données contenues dans la table deleted sont celles qui existaient avant l'exécution de l'instruction, tandis que celles de la table inserted reflètent les modifications définies dans la clause SET.

Si une instruction INSERT, UPDATE ou DELETE modifie de nombreuses lignes contenant des valeurs text, ntext ou image volumineuses, d'importantes ressources mémoire peuvent être requises pour le stockage des copies des données text, ntext ou image dans les tables inserted et deleted. La copie de ces quantités importantes de données peut également diminuer les performances. Les instructions INSERT, UPDATE et DELETE qui font référence à des vues ou des tables détenant des déclencheurs INSTEAD OF doivent modifier une ligne à la fois ou uniquement quelques lignes à la fois, dans la mesure du possible.