Modification de données ntext, text et image
Lorsque vous remplacez la valeur entière, vous pouvez mettre à jour les valeurs ntext, text ou image contenues dans une ligne en procédant comme suit :
Spécifiez des quantités relativement limitées de données dans une instruction UPDATE de la même manière que pour des données char, nchar ou binary.
Utilisez WRITETEXT.
Les applications ADO peuvent utiliser la méthode AppendChunk pour spécifier de grandes quantités de données ntext, text ou image.
Les applications OLE DB peuvent utiliser l'interface ISequentialStream pour écrire de nouvelles valeurs ntext, text ou image. Pour plus d'informations, consultez Objets BLOB et OLE.
Les applications ODBC peuvent utiliser le formulaire data-at-execution de SQLPutData pour écrire de nouvelles valeurs ntext, text ou image. Pour plus d'informations, consultez Gestion des colonnes text et image.
Les applications de la bibliothèque de bases de données peuvent utiliser la fonction dbwritetext. Pour plus d'informations, consultez Fonctions texte et image (Transact-SQL).
SQL Server prend aussi en charge la mise à jour d'une partie seulement d'une valeur ntext, text ou image. Dans la bibliothèque de bases de données, cette mise à jour partielle s'effectue par le biais de la fonction dbupdatetext. Toutes les autres applications, ainsi que les scripts, les traitements, les procédures stockées et les déclencheurs Transact-SQL peuvent utiliser l'instruction UPDATETEXT pour effectuer une mise à jour partielle d'une colonne ntext, text ou image.
Le script suivant montre comment l'instruction UPDATETEXT est utilisée avec PATINDEX pour rechercher et remplacer une chaîne spécifique dans une valeur text :
USE Northwind
GO
CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT)
GO
INSERT INTO TextParts
VALUES( 1,
'Sample string START TAG Text to go END TAG Trailing text.')
GO
DECLARE @PtrVar BINARY(16)
DECLARE @InsertPos INT
DECLARE @DeleteLen INT
SELECT @PtrVar = TEXTPTR(ColB),
@InsertPos = (PATINDEX('%START TAG%', ColB) + 9),
@DeleteLen = (
PATINDEX('%END TAG%', ColB) -
( PATINDEX('%START TAG%', ColB) + 9
+ 2 /* allow for blanks */ )
)
FROM TextParts
WHERE ColA = 1
UPDATETEXT TextParts.ColB
@PtrVar
@InsertPos
@DeleteLen
WITH LOG
'The new text'
GO
SELECT * FROM TextParts
GO
L'ensemble de résultats de l'instruction SELECT finale est le suivant :
ColA ColB
----------- ------------------------------------------------------------
1 Sample string START TAG The new text END TAG Trailing text.