TEXTPTR (Transact-SQL)

Renvoie la valeur du pointeur de texte correspondant à une colonne text, ntext ou image au format varbinary. La valeur du pointeur de texte obtenue peut être utilisée dans les instructions READTEXT, WRITETEXT et UPDATETEXT.

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 fonctionnalité alternative n'est pas disponible.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

TEXTPTR ( column )

Arguments

  • column
    Colonne text, ntext ou image à utiliser.

Types des valeurs renvoyées

varbinary

Notes

Dans SQL Server 2005 et versions ultérieures, pour les tables avec du texte en ligne, TEXTPTR renvoie un descripteur pour le texte à traiter. Vous pouvez obtenir un pointeur de texte valide même lorsque la valeur du texte est nulle.

Dans SQL Server 2005 et versions ultérieures, vous ne pouvez pas utiliser la fonction TEXTPTR sur des colonnes de vues. Vous ne pouvez l'utiliser que sur des colonnes de tables. Pour utiliser la fonction TEXTPTR sur une colonne de vue, vous devez spécifier un niveau de compatibilité égal à 80 à l'aide du niveau de compatibilité ALTER DATABASE. Si la table ne possède pas de texte en ligne, et si aucune colonne text, ntext ou image n'a été initialisée par une instruction UPDATETEXT, TEXTPTR retourne un pointeur Null.

Utilisez TEXTVALID pour vérifier l'existence d'un pointeur de texte. Vous ne pouvez pas utiliser UPDATETEXT, WRITETEXT ou READTEXT sans pointeur de texte valide.

Ces fonctions et instructions sont également utiles lorsque vous travaillez avec des données text, ntext et image.

Fonction ou instruction

Description

PATINDEX('%pattern%' , expression)

Retourne la position d'un caractère dans la chaîne de caractères spécifiée, dans des colonnes text ou ntext.

DATALENGTH(expression)

Retourne la longueur de la chaîne dans des colonnes text, ntext et image.

SET TEXTSIZE

Retourne la limite, en octets, des données text, ntext ou image à renvoyer avec une instruction SELECT.

SUBSTRING(text_column, start, length)

Retourne une chaîne varchar spécifiée par le décalage de start et par length. La longueur doit être inférieure à 8 Ko.

Exemples

[!REMARQUE]

Pour exécuter les exemples suivants, vous devez installer la base de données pubs. Pour plus d'informations sur l'installation de la base de données pubs, consultez Téléchargement des exemples de bases de données Northwind et pubs.

A. Utilisation de TEXTPTR

L'exemple qui suit utilise la fonction TEXTPTR pour rechercher le logo de la colonne image associé à la valeur New Moon Books dans la table pub_info de la base de données pubs. Le pointeur de texte identifie la variable locale @ptrval..

USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(logo) 
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id 
   AND p.pub_name = 'New Moon Books'
GO

B. Utilisation de TEXTPTR avec du texte dans la ligne

Dans SQL Server, le pointeur de texte dans la ligne doit être utilisé au sein d'une transaction, comme le montre l'exemple suivant.

CREATE TABLE t1 (c1 int, c2 text)
EXEC sp_tableoption 't1', 'text in row', 'on'
INSERT t1 VALUES ('1', 'This is text.')
GO
BEGIN TRAN
   DECLARE @ptrval VARBINARY(16)
   SELECT @ptrval = TEXTPTR(c2)
   FROM t1
   WHERE c1 = 1
   READTEXT t1.c2 @ptrval 0 1
COMMIT

C. Renvoi des données texte

Cet exemple sélectionne la colonne pub_id et le pointeur de texte sur 16 octets de la colonne pr_info dans la table pub_info.

USE pubs
GO
SELECT pub_id, TEXTPTR(pr_info)
FROM pub_info
ORDER BY pub_id
GO

Voici l'ensemble des résultats.

pub_id                                    
------ ---------------------------------- 
0736   0x6c0000000000feffb801000001000100 
0877   0x6d0000000000feffb801000001000300 
1389   0x6e0000000000feffb801000001000500 
1622   0x700000000000feffb801000001000900 
1756   0x710000000000feffb801000001000b00 
9901   0x720000000000feffb801000001000d00 
9952   0x6f0000000000feffb801000001000700 
9999   0x730000000000feffb801000001000f00 

(8 row(s) affected)

Cet exemple indique comment retourner les 8000 premiers octets de texte sans utiliser TEXTPTR.

USE pubs
GO
SET TEXTSIZE 8000
SELECT pub_id, pr_info
FROM pub_info
ORDER BY pub_id
GO

Voici l'ensemble des résultats.

pub_id pr_info                                                                                                                                                                                                                                                         
------ -----------------------------------------------------------------
0736   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!                                                                                                           
0877   This is sample text data for Binnet & Hardley, publisher 0877 in the pubs database. Binnet & Hardley is located in Washington, D.C.

This is sample text data for Binnet & Hardley, publisher 0877 in the pubs database. Binnet & Hardley is located in Washi 
1389   This is sample text data for Algodata Infosystems, publisher 1389 in the pubs database. Algodata Infosystems is located in Berkeley, California.

9999   This is sample text data for Lucerne Publishing, publisher 9999 in the pubs database. Lucerne publishing is located in Paris, France.

This is sample text data for Lucerne Publishing, publisher 9999 in the pubs database. Lucerne publishing is located in 

(8 row(s) affected)

D. Renvoi des données texte spécifiques

L'exemple qui suit localise la colonne text (pr_info) associée à pub_id0736 dans la table pub_info de la base de données pubs. Elle commence par déclarer la variable locale @val. Le pointeur de texte (une chaîne binaire de type long) est ensuite placé dans @val, puis passé comme paramètre à l'instruction READTEXT. Cette opération renvoie 10 octets à partir du cinquième octet (décalage de 4 octets).

USE pubs
GO
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(pr_info) 
FROM pub_info
WHERE pub_id = '0736'
READTEXT pub_info.pr_info @val 4 10
GO

Voici l'ensemble des résultats.

pr_info                                                                                                                                                                                                                                                         
-----------------------------------------------------------------------
 is sample
(1 row(s) affected)