Funciones de texto e imagen - TEXTPTR (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Devuelve el valor de puntero de texto que corresponde a una columna text, ntext o image en formato varbinary. El valor del puntero de texto devuelto se puede utilizar en las instrucciones READTEXT, WRITETEXT y UPDATE.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. No hay ninguna funcionalidad alternativa disponible.

Convenciones de sintaxis de Transact-SQL

Sintaxis

TEXTPTR ( column )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

column
Se utilizará la columna text, ntext o image.

Tipos de valor devuelto

varbinary

Observaciones

En las tablas con texto consecutivo, TEXTPTR devuelve un controlador para el texto que se va a procesar. Es posible obtener un puntero de texto válido aunque el valor del texto sea NULL.

La función TEXTPTR no se puede utilizar en columnas de vistas. Solo se puede utilizar en columnas de tablas. Para utilizar la función TEXTPTR en una columna de una vista, debe establecerse el nivel de compatibilidad en 80 mediante el nivel de compatibilidad de ALTER DATABASE. Si la tabla no dispone de texto consecutivo y la instrucción UPDATETEXT no ha inicializado una columna text, ntext o image, TEXTPTR devuelve un puntero NULL.

Utilice TEXTVALID para comprobar si un puntero de texto existe. No es posible utilizar UPDATETEXT, WRITETEXT o READTEXT sin un puntero de texto válido.

Estas funciones e instrucciones son también útiles cuando se trabaja con datos de tipo text, ntext e image.

Función o instrucción Descripción
PATINDEX('%pattern%' ,expression) Devuelve la posición de carácter de una cadena de caracteres especificada en columnas de tipo text o ntext.
DATALENGTH(expression) Devuelve la longitud de datos en columnas text, ntext e image.
SET TEXTSIZE Devuelve el límite en bytes de los datos de tipo text, ntext o image que se devuelven con una instrucción SELECT.
SUBSTRING(text_column, start, length) Devuelve una cadena varchar según los valores especificados en el desplazamiento start y length. La longitud debe ser inferior a 8 KB.

Ejemplos

Nota:

Para ejecutar estos ejemplos, es necesario instalar la base de datos pubs.

A. Usar TEXTPTR

En el ejemplo siguiente se utiliza la función TEXTPTR para encontrar la columna logo de image asociada a New Moon Books en la tabla pub_info de la base de datos pubs. El puntero de texto se coloca en la variable local @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. Usar TEXTPTR con texto consecutivo

En SQL Server, el puntero de texto consecutivo debe utilizarse dentro de una transacción, como se muestra en el ejemplo siguiente.

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. Devolver datos de texto

En el ejemplo siguiente se seleccionan la columna pub_id y el puntero de texto de 16 bits de la columna pr_info de la tabla pub_info.

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

El conjunto de resultados es el siguiente:

pub_id                                      
------ ----------------------------------   
0736   0x6c0000000000feffb801000001000100   
0877   0x6d0000000000feffb801000001000300   
1389   0x6e0000000000feffb801000001000500   
1622   0x700000000000feffb801000001000900   
1756   0x710000000000feffb801000001000b00   
9901   0x720000000000feffb801000001000d00   
9952   0x6f0000000000feffb801000001000700   
9999   0x730000000000feffb801000001000f00   
  
(8 row(s) affected)  

En el ejemplo siguiente se muestra cómo devolver los primeros 8000 bytes de texto sin utilizar TEXTPTR.

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

El conjunto de resultados es el siguiente:

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. Devolver datos de texto específicos

En el ejemplo siguiente se encuentra la columna text (pr_info) asociada a pub_id``0736 en la tabla pub_info de la base de datos pubs. Primero se declara la variable local @val. A continuación, el puntero de texto (una cadena binaria de tipo long) se coloca en @val y se suministra como parámetro a la instrucción READTEXT. De esta forma, se devuelven 10 bytes a partir del quinto byte (el desplazamiento es 4).

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  

El conjunto de resultados es el siguiente:

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

Consulte también

DATALENGTH (Transact-SQL)
PATINDEX (Transact-SQL)
READTEXT (Transact-SQL)
SET TEXTSIZE (Transact-SQL)
Funciones de texto e imagen (Transact-SQL)
UPDATETEXT (Transact-SQL)
WRITETEXT (Transact-SQL)