TEXTPTR (Transact-SQL)

Devuelve el valor del 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.

Nota importanteImportante

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

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

TEXTPTR ( column )

Argumentos

  • column
    Es la columna de tipo text, ntext o image que se va a utilizar.

Tipos de valor devueltos

varbinary

Notas

En SQL Server 2005 y versiones posteriores, 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.

En SQL Server 2005 y versiones posteriores, la función TEXTPTR no se puede utilizar en columnas de vistas. Sólo 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 puede utilizarse UPDATETEXT, WRITETEXT o READTEXT sin un puntero de texto valido.

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 los datos de las columnas de tipo 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 de tipo varchar según los valores especificados en el desplazamiento start y length. La longitud debe ser inferior a 8 KB.

Ejemplos

[!NOTA]

Para ejecutar los ejemplos siguientes, debe instalar la base de datos pubs. Para obtener más información acerca de cómo instalar la base de datos pubs, vea Descargar las bases de datos de ejemplo Northwind y pubs.

A. Usar TEXTPTR

En el ejemplo siguiente se utiliza la función TEXTPTR para encontrar la columna de tipo imagelogo 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

Éste es el conjunto de resultados.

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

Éste es el conjunto de resultados.

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 de tipo text (pr_info) asociada a pub_id0736 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

Éste es el conjunto de resultados.

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