sql >> Base de Datos >  >> RDS >> Sqlserver

SET TEXTSIZE ¿No funciona en SQL Server? Mira esto.

¿Ha utilizado SET TEXTSIZE para limitar los datos devueltos por una consulta, pero descubrió que simplemente no parece funcionar? Está descubriendo que su SELECT las consultas continúan devolviendo la cantidad total de texto, independientemente del TEXTSIZE valor?

sigue leyendo Podrías estar cometiendo este error obvio.

Cuando me encontré por primera vez con TEXTSIZE opción, decidí hacer una prueba rápida. Pero no funcionó. Probé varias veces con varios TEXTSIZE valores, pero nada parecía funcionar.

"¿Por qué no está funcionando?" Me preguntaba.

Pero luego hizo clic. Volví a leer la documentación y me di cuenta de que no estaba usando el tamaño de cadena correcto para mis tipos de datos.

El TEXTSIZE solo funciona con los siguientes tipos de datos:

  • varchar(máximo)
  • nvarchar(máximo)
  • varbinario(máximo)
  • texto
  • ntext
  • imagen

Si observa los primeros tres, observe que usan max para el argumento. Esto significa que utilizan el tamaño máximo de cadena/almacenamiento.

Lo estaba probando contra columnas de tipo nvarchar(100) , varchar(255) , etc. No es de extrañar que no funcionara.

Ejemplo

Aquí hay un ejemplo para demostrar lo que quiero decir.

USE Test; 
DROP TABLE IF EXISTS TextSizeTest;
CREATE TABLE TextSizeTest (
    varchar50 varchar(50),
    varcharMax varchar(max),
    nvarcharMax nvarchar(max)
    ); 
INSERT INTO TextSizeTest
VALUES (
    'Dragonfruit',
    'Dragonfruit',
    'Dragonfruit'
    );

SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;

Resultado:

+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Drag         | Dr            |
+-------------+--------------+---------------+

Aquí, configuro el TEXTSIZE valor a 4 , pero el texto completo del varchar(50) la columna permanece intacta. Esta columna no se ve afectada por SET TEXTSIZE . Y así es exactamente como se supone que debe funcionar.

Solo las otras dos columnas se ven afectadas, porque son varchar(max) y nvarchar(max) respectivamente.

Además, la razón por la que nvarchar la columna es más corta que varchar es porque usa dos bytes para cada carácter (en comparación con varchar es un byte por carácter).

Entonces, si tiene problemas con SET TEXTSIZE , comprueba tu tipo de datos.