WRITETEXT (Transact-SQL)
Permet la mise à jour interactive, journalisée de façon minimale, d'une colonne de type text, ntext ou image existante. WRITETEXT remplace totalement les données existantes de la colonne qu'elle affecte. Vous ne pouvez pas utiliser WRITETEXT sur les colonnes text, ntext et image des vues.
Important
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. À la place, utilisez les types de données de valeur élevée et la clause .WRITE de l'instruction UPDATE.
Syntaxe
WRITETEXT { table.column text_ptr }
[ WITH LOG ] { data }
Arguments
table**.**column
Nom de la table et de la colonne text, ntext ou image à mettre à jour. Les noms de la table et de la colonne doivent suivre les règles applicables aux identificateurs. La spécification des noms de la base de données et du propriétaire est facultative.text_ptr
Valeur qui stocke le pointeur des données text, ntext ou image. text_ptr doit être de type binary(16). Pour créer un pointeur de texte, exécutez une instruction INSERT ou UPDATE avec des données non NULL pour la colonne text, ntext ou image.WITH LOG
Ignoré par SQL Server. La consignation dans un journal est déterminée par le mode de récupération en vigueur dans la base de données.data
Correspond aux données text, ntext ou image actuelles à stocker. data peut être un littéral ou un paramètre. La longueur maximale du texte que vous pouvez insérer de manière interactive au moyen de WRITETEXT est d'environ 120 Ko pour les données text, ntext et image.
Notes
Utilisez WRITETEXT pour remplacer les données text, ntext et image et UPDATETEXT pour les modifier. UPDATETEXT est plus souple car il modifie uniquement une partie d'une colonne text, ntext ou image, au lieu d'affecter la colonne entière.
Afin d'optimiser les performances, il est recommandé d'insérer ou de mettre à jour les données text, ntext et image dans des tailles de segment qui sont des multiples de 8 040 octets.
Si le mode de récupération de base de données est le mode de récupération simple ou le mode de récupération utilisant les journaux de transactions, les opérations text, ntext et image qui utilisent WRITETEXT sont des opérations journalisées de façon minimale lorsque de nouvelles données sont insérées ou ajoutées. Pour plus d'informations, consultez Opérations pouvant faire l'objet d'une journalisation minimale.
[!REMARQUE]
La journalisation minimale n'est pas utilisée lorsque des valeurs existantes sont mises à jour.
Pour que l'instruction WRITETEXT fonctionne correctement, la colonne doit déjà contenir un pointeur de texte valide.
Si la table ne contient pas de texte dans les lignes, SQL Server économise de l'espace en n'initialisant pas les colonnes text lorsque des valeurs NULL explicites ou implicites sont ajoutées à des colonnes text à l'aide de l'instruction INSERT, et aucun pointeur de texte ne peut être obtenu pour ces valeurs NULL. Pour initialiser les colonnes text à la valeur NULL, utilisez l'instruction UPDATE. Si la table contient du texte dans ses lignes, vous n'avez pas besoin d'initialiser la colonne text pour les valeurs NULL et vous pouvez toujours obtenir un pointeur de texte.
La fonction ODBC SQLPutData est plus rapide et utilise moins de mémoire dynamique que WRITETEXT. Cette fonction peut insérer jusqu'à 2 gigaoctets de données text, ntext ou image.
Dans SQL Server, il peut exister des pointeurs de texte dans la ligne vers des données text, ntext ou image mais ceux-ci peuvent ne pas être valides. Pour plus d'informations sur l'option text in row, consultez sp_tableoption (Transact-SQL). Pour plus d'informations sur l'invalidation des pointeurs de texte, consultez sp_invalidate_textptr (Transact-SQL).
Autorisations
Requiert une autorisation UPDATE sur la table spécifiée. L'autorisation est transférable lorsque l'autorisation UPDATE est transférée.
Exemple
L'exemple suivant place le pointeur de texte dans la variable locale @ptrval, puis WRITETEXT place la nouvelle chaîne de texte dans la ligne sur laquelle pointe @ptrval.
[!REMARQUE]
Pour exécuter cet exemple, vous devez installer l'exemple de base de données pubs. Pour plus d'informations sur l'installation de l'exemple de base de données pubs, consultez Téléchargement des exemples de bases de données Northwind et pubs.
USE pubs;
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) has just released another top ten publication. With the latest publication this makes NMB the hottest new publisher of the year!';
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO