Manipulando Campos TEXT
Exemplos de manipulação do tipo de campo TEXT
Vou falar de um tipo de campo muito pouco utilizado, porém podemos nos deparar com situações onde teremos que manipulá-los e pode ser uma grande dor de cabeça, até mesmo pela pouca utilização e poucos exemplos.
Este tipo de campo armazena dados não Unicode de comprimento variável na página de código do servidor e com um comprimento máximo de 2^31-1 (2,147,483,647) caracteres. Quando a página de código de servidor usar caracteres de dois bytes, o armazenamento ainda será de 2.147.483.647 bytes. Dependendo da cadeia de caracteres, o tamanho do armazenamento pode ser menor que 2.147.483.647 bytes. O uso deste tipo de campo não é recomendado pela Microsoft, pois o mesmo tem seus dias contados para próximas versões do SQL Server. Ele utiliza caracteres não Unicode por conseqüência não usa conjunto UCS-2.
Além disso, este tipo de arquivo possui estrutura bem particular para manipulação. Vou mostrar a utilização de algumas funções de leitura, escrita e atualização destes campos, mas antes disto, vamos criar uma tabela como exemplo para realizarmos todos os testes em cima dela:
create table Teste1 ( inteiro int, texto text);
Vamos inserir alguns dados para trabalharmos em cima destes:
insert into teste1 values( 1,'Este é um exemplo de texto para ser
inserido no SQL Server em um campo do typo de dados text. Devido seu
tamanho não é possível inserí-lo em um campo varchar normal, neste
caso foi usado text para exemplo');
insert into teste1 values( 2,'Este é um exemplo menor de text para
exemplo');
</pre>
Um detalhe bastante importante neste caso é que o campo text aceita ser inserido dados como se estivéssemos tratando de um campo varchar.
Ressaltamos que todas as funções a seguir bem como o tipo de dados serão descontinuadas posteriormente. Também veremos em todos os exemplos a seguir a utilização da função TextPTR que retorna o valor do ponteiro de texto que corresponde a uma coluna text no formato varbinary. O valor do ponteiro de texto recuperado pode ser usado nas instruções que vamos utilizar READTEXT, WRITETEXT e UPDATETEXT.
Writetext
Substitui quaisquer dados existentes na coluna afetada, é como um update de um campo atribuindo valor referenciado no WriteText, como no exemplo:
WRITETEXT [BULK]
{ table.column text_ptr }
[ WITH LOG ] { data }
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(texto)
FROM teste1
where inteiro = 1
WRITETEXT teste1.texto @ptrval 'This is an example of text to be
inserted into SQL Server in a field of type of text data. Because of
its size can not insert it into a varchar field normal in this case
was used text for example'
GO
</pre>
ReadText
Este lê valores text de uma coluna começando em um deslocamento especificado e lendo o número especificado de bytes.
READTEXT { table.column text_ptr offset size } [ HOLDLOCK ]
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(texto)
FROM teste1
where inteiro = 1
READTEXT teste1.texto @ptrval 0 0
GO
</pre>
Neste exemplo os parâmetros, offset refere o a posição onde será iniciada a leitura e size é a quantidade de bytes ou catacteres que serão lidos.
Caso ambos fiquem com 0(zero) como no exemplo, será lido todo o campo.
UpdateText
Atualiza um campo text existente. Usa-se UPDATETEXT para alterar somente parte de uma coluna. Este é como um update de uma coluna = coluna + 'novos valores'. Para atribuir valor diretamente a um campo use o WRITETEXT.
UPDATETEXT [BULK] { table_name.dest_column_name dest_text_ptr } { NULL | insert_offset } { NULL | delete_length } [ WITH LOG ] [ inserted_data | { table_name.src_column_name src_text_ptr } ]
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(texto)
FROM teste1
where inteiro = 1
--inserindo no início
UPDATETEXT teste1.texto @ptrval 0 0 '!';
--inserindo no final
UPDATETEXT teste1.texto @ptrval NULL 0 '?';
GO
</pre>
Neste caso colocamos dois exemplos de atualização, um inserindo no início do campo e outro no final, ambos são utilizados de forma genérica pois não estamos utilizando uma posição predeterminadas para o campo.
Os parâmetros insert_offset é a posição inicial baseada em zero para a atualização, 0 (zero) informa que será inserido a partir do início e NULL remete ao final do campo outros valores referenciam a posição que iniciará a inserção. Já o parâmetro delete_length> é a quantidade de caracteres a serem excluídos a partir do parâmetro insert_offset.
Espero que possa ajudar a todos que tiverem algum tipo de contato com este tipo de campo. Até a próxima.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo