Usando as funções text, ntext e image

As seguintes funções são usadas exclusivamente para operações em dados text, ntext e image:

  • TEXTPTR retorna um objeto binary(16) que contém um ponteiro para uma instância text, ntext ou image. O ponteiro permanece válido até que a linha seja excluída.

  • A função TEXTVALID verifica se um ponteiro de texto especificado é válido ou não.

Os ponteiros de texto são passados para as instruções READTEXT, UPDATETEXT, WRITETEXT, PATINDEX, DATALENGTH e SET TEXTSIZE Transact-SQL usadas para alterar os dados text, ntext e image.

Nas instruções Transact-SQL, os dados text, ntext e image são sempre referenciados usando-se ponteiros ou o endereço dos dados.

O exemplo a seguir usa a função TEXTPTR para localizar a coluna text (pr_info) associada a pub_id0736 na tabela pub_info do banco de dados pubs. Primeiro, ele declara a variável local @val. O ponteiro de texto, uma longa cadeia de caracteres binários, é colocado em @val e fornecido como parâmetro para a instrução READTEXT. Isso retorna 10 bytes, começando no quinto byte (deslocamento de 4).

ObservaçãoObservação

Para executar este exemplo, é necessário instalar o banco de dados pubs. Para obter informações sobre como instalar o banco de dados pubs, consulte Baixando os bancos de dados de exemplo Northwind e pubs.

USE pubs
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(pr_info) FROM pub_info
WHERE pub_id = '0736'
READTEXT pub_info.pr_info @val 4 10

Aqui está o conjunto de resultados.

(1 row(s) affected)

pr_info
----------------------------------------
 is sample

A conversão explícita usando a função CAST é suportada de text a varchar, de ntext a nvarchar e de image a varbinary ou binary, mas os dados text ou image são truncados para 8.000 bytes e os dados ntext são truncados para 4.000 caracteres (8.000 bytes). A conversão de text, ntext ou image em outro tipo de dados não é suportada, implícita ou explicitamente. Entretanto, a conversão indireta dos dados text, ntext, ou image pode ser executada. Por exemplo: CAST( CAST( text_column_namevarchar(10) de AS) AS int ).