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.
Importante: |
---|
Questa funzionalità verrà rimossa in 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. |
Convenzioni 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, 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, 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 sp_dbcmptlevel.
Se una tabella non contiene testo nelle righe e tramite un'istruzione UPDATETEXT non è stata inizializzata una colonna di tipo text, ntext o image, TEXTPTR restituisce un puntatore Null.
Utilizzare TEXTVALID per verificare se esiste 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_id``0736
nella tabella pub_info
del database pubs
. Viene innanzitutto dichiarata la variabile locale @val
. Il puntatore di testo, ovvero una stringa binaria lunga, 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)
Vedere anche
Riferimento
DATALENGTH (Transact-SQL)
PATINDEX (Transact-SQL)
READTEXT (Transact-SQL)
SET TEXTSIZE (Transact-SQL)
Funzioni per i valori text e image (Transact-SQL)
UPDATETEXT (Transact-SQL)
WRITETEXT (Transact-SQL)