TEXTPTR (Transact-SQL)

Restituisce il valore del puntatore di testo corrispondente a una colonna di tipo text, ntext o image in formato varbinary. È possibile utilizzare il valore del puntatore di testo recuperato nelle istruzioni READTEXT, WRITETEXT e UPDATETEXT.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Non è disponibile una funzionalità alternativa.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

TEXTPTR ( column )

Argomenti

  • column
    Colonna di tipo text, ntext o image che verrà utilizzata.

Tipi restituiti

varbinary

Osservazioni

In SQL Server 2005 e versioni successive, per le tabelle contenenti testo nelle righe, l'istruzione TEXTPTR restituisce un handle per il testo da elaborare. È possibile ottenere un puntatore di testo valido anche se il valore di testo è Null.

In SQL Server 2005 e versioni successive non è possibile utilizzare la funzione TEXTPTR sulle colonne di viste, ma solo sulle colonne di tabelle. Per utilizzare la funzione TEXTPTR su una colonna di una vista, è necessario impostare il livello di compatibilità su 80 tramite il livello di compatibilità di ALTER DATABASE. Se una tabella non contiene testo all'interno di righe e se non è stata inizializzata una colonna di tipo text, ntext o image tramite un'istruzione UPDATETEXT, TEXTPTR restituisce un puntatore Null.

Utilizzare TEXTVALID per verificare la presenza di un puntatore di testo. Non è possibile utilizzare UPDATETEXT, WRITETEXT o READTEXT senza un puntatore di testo valido.

Queste funzioni e istruzioni sono utili anche quando si utilizzano dati di tipo text, ntext e image.

Funzione o istruzione

Descrizione

PATINDEX('%pattern%' , expression)

Restituisce la posizione dei caratteri di una determinata stringa di caratteri nelle colonne di tipo text o ntext.

DATALENGTH(expression)

Restituisce la lunghezza dei dati nelle colonne di tipo text, ntext e image.

SET TEXTSIZE

Restituisce il limite espresso in byte dei dati di tipo text, ntext o image da recuperare con un'istruzione SELECT.

SUBSTRING(text_column, start, length)

Restituisce una stringa di tipo varchar determinata dall'offset start specificato e da length. La lunghezza massima è di 8 KB.

Esempi

[!NOTA]

Per eseguire gli esempi seguenti, è necessario installare il database pubs. Per informazioni sulle procedure di installazione del database pubs, vedere Download dei database di esempio Northwind e pubs

A. Utilizzo di TEXTPTR

Nell'esempio seguente viene utilizzata la funzione TEXTPTR per individuare il valore logo della colonna image associato a New Moon Books nella tabella pub_info del database pubs. Il puntatore di testo è inserito in una variabile 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. Utilizzo di TEXTPTR con testo all'interno di righe

In SQL Server il puntatore di testo all'interno di righe deve essere utilizzato all'interno di una transazione, come illustrato nell'esempio seguente.

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. Restituzione di dati in formato testo

Nell'esempio seguente la colonna pub_id e il puntatore di testo a 16 byte della colonna pr_info vengono selezionati nella tabella pub_info.

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

Set di risultati:

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

(8 row(s) affected)

Nell'esempio seguente viene illustrato come restituire i primi 8000 byte di testo senza utilizzare TEXTPTR.

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

Set di risultati:

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. Restituzione di dati specifici in formato testo

Nell'esempio seguente viene individuata la colonna text (pr_info) associata a pub_id0736 nella tabella pub_info del database pubs. Viene innanzitutto dichiarata la variabile locale @val. Il puntatore di testo, ovvero una stringa di dati binari di tipo Long, viene quindi inserito in @val e passato come parametro all'istruzione READTEXT, che restituisce 10 byte a partire dal quinto byte (offset pari a 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

Set di risultati:

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