Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use SET TEXTSIZE para limitar os dados retornados para cada linha no SQL Server


No SQL Server, o SET TEXTSIZE instrução especifica o tamanho de varchar(max) , nvarchar(max) , varbinary(max) , texto , ntext e imagem dados retornados por um SELECT demonstração.

A Microsoft informa que texto , ntext e imagem serão removidos em uma versão futura do SQL Server, portanto, evite usar esses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que os usam atualmente para usar varchar(max) , nvarchar(max) , ou varbinary(max) em vez de.


Exemplo 1 – Uso básico


Aqui está um exemplo de configuração de TEXTSIZE valor.
SET TEXTSIZE 2048;

Isso define TEXTSIZE para 2048 bytes.

Exemplo 2 – Verifique o valor TEXTSIZE


Você pode verificar o TEXTSIZE atual valor com @@TEXTSIZE :
SELECIONE @@TEXTSIZE AS [Tamanho do texto];

Resultado:
+-------------+| Tamanho do Texto ||-------------|| 2048 |+-------------+

Exemplo 3 – Como isso afeta os resultados da consulta


Aqui está um exemplo que demonstra como o TEXTSIZE valor pode afetar os resultados retornados em um SELECT inquerir.

Primeiro vamos criar uma tabela, inserir algum texto e depois selecioná-lo.
USE Test;CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SELECT * FROM TextSizeTest;

Resultado (normal):
+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Dragonfruit | Dragonfruit | Fruta-dragão |+-------------+--------------+---------------+ 
Isso é o que normalmente esperamos. Ele retorna o texto completo dentro de cada coluna porque cada linha de texto ocupa menos de 2048 bytes (que é o que eu configurei TEXTSIZE para no exemplo anterior).

Mas eis o que acontece se eu reduzir o TEXTSIZE valor:
SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Resultado:
+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Dragonfruit | Arraste | Dr |+-------------+--------------+---------------+ 
A primeira coluna não é afetada, porque não é uma coluna "máxima". O que quero dizer é que é um varchar(50) e não varchar(max) . O TEXTSIZE A opção afeta apenas as colunas definidas com max .

A segunda coluna retorna os primeiros quatro caracteres. Isso ocorre porque definimos o TEXTSIZE valor para 4, e os primeiros quatro caracteres estão usando 4 bytes.

A terceira coluna retorna apenas os 2 primeiros caracteres. Isso ocorre porque é um nvarchar coluna. Nesse caso, os dois primeiros caracteres estão usando 4 bytes.

Exemplo 4 – Redefinir o valor


Uma coisa que você deve saber é que especificar SET TEXTSIZE 0 na verdade, “reinicia” para o valor padrão de 4096.
SET TEXTSIZE 0;SELECT @@TEXTSIZE AS [@@TEXTSIZE];SELECT * FROM TextSizeTest;

Resultado:
+--------------+| @@TEXTSIZE ||--------------|| 4096 |+--------------+(1 linha afetada)+-------------+------------ --+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Dragonfruit | Dragonfruit | Fruta-dragão |+-------------+--------------+---------------+(1 linha afetada)