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

SET TEXTSIZE Não está funcionando no SQL Server? Verifique isso.


Você usou SET TEXTSIZE para limitar os dados retornados por uma consulta, mas descobriu que simplesmente não funciona? Você está descobrindo que seu SELECT as consultas continuam a retornar a quantidade total de texto, independentemente do TEXTSIZE valor?

Leia. Você pode estar cometendo um erro óbvio.

Quando encontrei pela primeira vez o TEXTSIZE opção, decidi fazer um teste rápido. Mas não funcionou. Eu tentei várias vezes com vários TEXTSIZE valores, mas nada parecia funcionar.

“Por que não está funcionando?” Eu me perguntei.

Mas então clicou. Reli a documentação e percebi que não estava usando o tamanho de string correto para meus tipos de dados.



O TEXTSIZE só funciona nos seguintes tipos de dados:
  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • texto
  • ntexto
  • imagem

Se você observar os três primeiros, observe que eles usam max para o argumento. Isso significa que eles usam o tamanho máximo de string/armazenamento.

Eu estava testando em colunas do tipo nvarchar(100) , varchar(255) , etc. Não é de admirar que não estivesse funcionando.

Exemplo


Aqui está um exemplo para demonstrar o que quero dizer.
Teste de USO; DROP TABLE SE EXISTE TextSizeTest;CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Resultado:
+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Dragonfruit | Arraste | Dr |+-------------+--------------+---------------+ 
Aqui, defino o TEXTSIZE valor para 4 , mas o texto completo do varchar(50) coluna permanece intacta. Esta coluna não é afetada por SET TEXTSIZE . E é exatamente assim que deve funcionar.

São apenas as outras duas colunas que são afetadas, porque são varchar(max) e nvarchar(max) respectivamente.

Além disso, o motivo do nvarchar coluna é menor que o varchar é porque ele usa dois bytes para cada caractere (em comparação com varchar é um byte por caractere).

Então, se você está tendo problemas com SET TEXTSIZE , verifique seu tipo de dados.