Funciones de texto e imagen - TEXTPTR (Transact-SQL)
Se aplica a: SQL Server Azure 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 )
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
Este 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
Este 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 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
Este es el conjunto de resultados.
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)