Dans SQL Server, un champ varchar peut contenir au maximum 8000 caractères. Si on en veut stocker une plus grande quantité de données, on doit utiliser un type "text". À l'interne, ce n'est pas enregistré directement dans la row. À la place, le champ conserve uniquement un pointeur vers un autre emplacement. Ce mécanisme de BLOB (Binary Large OBject) permet de stocker jusqu'à 2 Go de données dans le champ.
Ce qu'il faut savoir avec un champ text, c'est qu'on ne peut pas le mettre à jour aussi simplement qu'un type varchar. Par exemple, pour concaténer du texte à un champ existant, on doit utiliser l'énoncé UPDATETEXT. L'idéal est de s'y prendre à l'intérieur d'une procédure stockée avec T-SQL.
Par exemple, pour ajouter une phrase :
-- modèle de table simpleUn petit aide mémoire :
CREATE TABLE tbl (
record_id INT PRIMARY KEY IDENTITY(1,1),
text_field TEXT
)
-- ajout d'un enregistrement
INSERT INTO tbl(text_field)
VALUES('Phrase 1.')
-- variable contenant le texte à ajouter
DECLARE @text_to_append varchar(1000)
-- déclaration d'un pointeur
DECLARE @ptrval binary(16)
-- initialisation de la variable
SET @text_to_append = 'Phrase 2.'
-- obtenir le pointeur
SELECT @ptrval = TEXTPTR(text_field)
FROM tbl
WHERE record_id = @id
-- pointer, offset, delete length, data
UPDATETEXT tbl.text_field @ptrval NULL 0 @text_to_append
- Pour remplacer la valeur existante :
offset : != null
taille à supprimer : > 0
données : texte à placer - Pour supprimer la valeur existante :
offset : != null
taille à supprimer : > 0
données : vide - Pour insérer des nouvelles données à la suite de la valeur existante :
offset : != null
taille à supprimer : 0
données : texte à ajouter