Usando dados de texto e de imagem

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Use os tipos de dados varchar(max), nvarchar(max) e varbinary(max) em vez disso. Para obter mais informações, consulte Usando tipos de dados de valor grande.

Microsoft SQL Server armazena cadeias de caracteres superiores a 8.000 caracteres e dados binários superiores a 8.000 bytes em tipos de dados especiais denominados text e image. As cadeias Unicode superiores a 4.000 caracteres são armazenadas no tipo de dados ntext.

Por exemplo, um arquivo grande de texto (.txt) de informações do cliente deve ser importado para o seu banco de dados SQL Server. Esses dados devem ser armazenados como um dado apenas em vez de serem integrados às diversas colunas de suas tabelas de dados. É possível criar uma coluna com o tipo de dados text para esse propósito. Entretanto, se você tiver que armazenar logos de empresas, armazenados atualmente como imagens (.tif) no formato TIFF com 10 KB cada, crie uma coluna com o tipo de dados image.

Se os dados textuais a serem armazenados estiverem no formato Unicode, use o tipo de dados ntext. Por exemplo, um formulário criado para clientes internacionais irá, provavelmente, conter ortografias internacionais e caracteres usados nos diversos idiomas. Armazene esses dados em uma coluna ntext.

Cada valor de dados text e ntext possui um agrupamento. Os agrupamentos definem atributos como regras de comparação e diferenciação entre maiúscula e minúscula e distinção de acentos. Os agrupamentos para os valores text também especificam a página de código “sa” que define os padrões de bit usados para representar cada caractere. Cada valor ntext usa a página de código Unicode, que é a mesma para todos os agrupamentos. Cada banco de dados possui um agrupamento padrão. Quando uma coluna text ou ntext é criada, atribui-se um agrupamento padrão do banco de dados, a menos que você atribua um agrupamento específico usando a cláusula COLLATE. Quando dois valores text ou ntext com agrupamentos diferentes são combinados ou comparados, as regras de precedência de agrupamento determinam o agrupamento que será usado para a operação.

Os dados em um dado de image são armazenados como uma cadeia de bits e não são interpretados pelo SQL Server. Qualquer interpretação dos dados em uma coluna image deve ser feita pelo aplicativo. Por exemplo, um aplicativo pode armazenar dados em uma coluna image usando os formatos BMP, TIFF, GIF ou JPEG. O aplicativo que lê os dados da coluna image deve reconhecer o formato dos dados e exibi-los corretamente. Tudo que uma coluna image faz é fornecer um lugar para armazenar o fluxo de bits que compõe o valor dos dados da imagem.

Usando texto em linha para armazenar valores text, ntext e image.

Geralmente, as cadeias text, ntext ou image são grandes, as cadeias de caracteres ou binárias, com no máximo 2GB, são armazenadas fora de uma linha de dados. A linha de dados contém apenas um ponteiro de texto de 16 bytes para o nó raiz de uma árvore criada a partir de ponteiros internos que mapeiam as páginas nas quais os fragmentos da cadeia estão armazenados.

Com o SQL Server, é possível armazenar valores text, ntext e image pequenos a médios em uma linha de dados, aumentando, assim, a velocidade das consultas que acessam esses valores.

Quando a cadeia text, ntext ou image é armazenada em uma linha de dados, o SQL Server não precisa acessar uma página separada ou um conjunto de páginas para ler ou escrever a cadeia. Isto torna a leitura e gravação das cadeias em linha text, ntext ou image tão rápida quanto a leitura ou gravação das cadeias varchar, nvarchar ou varbinary.

Para armazenar as cadeias text, ntext ou image em linha de dados, habilite a opção texto em linha usando o procedimento armazenado sp_tableoption.

sp_tableoption N'MyTable', 'text in row', 'ON';

Como opção, você pode especificar um limite máximo entre 24 e 7000 bytes para o tamanho de uma cadeia text, ntext e image armazenada em uma linha de dados:

sp_tableoption N'MyTable', 'text in row', '1000';

Se você especificar 'ON' em vez de dar um limite específico, o limite padronizará em 256 bytes. Esse valor padrão fornece a maioria dos benefícios do desempenho: É grande o suficiente para assegurar que cadeias pequenas e ponteiros de texto raiz sejam armazenados nas linhas, mas não tão grande a ponto de diminuir as linhas por página para afetar o desempenho.

Apesar de, em geral, você não ter que definir o valor abaixo de 72, você também não deve defini-lo muito alto, especialmente para tabelas em que as instruções não se referem às colunas text, ntext, e image ou haja diversas colunas text, ntext e image.

Você também pode usar o parâmetro sp_tableoption para desabilitar a função, especificando um valor de opção para “OFF” ou 0:

sp_tableoption N'MyTable', 'text in row', 'OFF';