Partage via


Fonctions texte et image - TEXTPTR (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

Retourne la valeur du pointeur de texte qui correspond à une colonne de type 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 version future de 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é. Aucune fonctionnalité de remplacement n'est disponible.

Conventions de la syntaxe Transact-SQL

Syntaxe

TEXTPTR ( column )  

Arguments

column
Colonne text, ntext ou image qui sera utilisée.

Types de retour

varbinary

Notes

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.

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 ni image n’a été initialisée par une instruction UPDATETEXT, la fonction 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 les colonnes text et ntext.
DATALENGTH(expression) Retourne la longueur des données dans les colonnes de type text, ntext et image.
SET TEXTSIZE Retourne la limite, en octets, des données text, ntext ou image à retourner avec une instruction SELECT.
SUBSTRING(text_column, start, length) Retourne une chaîne varchar spécifiée par le décalage start et par la longueur length. La longueur doit être inférieure à 8 Ko.

Exemples

Notes

Pour exécuter les exemples suivants, vous devez installer la base de données pubs.

R. Utilisation de TEXTPTR

L’exemple qui suit utilise la fonction TEXTPTR pour rechercher le logo de la colonne image associé à 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 le jeu de 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 le jeu de 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_id``0736 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 le jeu de résultats.

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

Voir aussi

DATALENGTH (Transact-SQL)
PATINDEX (Transact-SQL)
READTEXT (Transact-SQL)
SET TEXTSIZE (Transact-SQL)
Fonctions texte et image (Transact-SQL)
UPDATETEXT (Transact-SQL)
WRITETEXT (Transact-SQL)