En SQL Server, SET TEXTSIZE
declaración especifica el tamaño de varchar(max) , nvarchar(máximo) , varbinario(máximo) , texto , ntext y imagen datos devueltos por un SELECT
declaración.
Microsoft aconseja que texto , ntext y imagen se eliminará en una versión futura de SQL Server, por lo que debe evitar usar estos tipos de datos en nuevos trabajos de desarrollo y planear modificar las aplicaciones que actualmente los usan para usar varchar(max) , nvarchar(máximo) , o varbinary(max) en su lugar.
Ejemplo 1:uso básico
Aquí hay un ejemplo de configuración de TEXTSIZE
valor.
SET TEXTSIZE 2048;
Eso establece TEXTSIZE
a 2048 bytes.
Ejemplo 2:comprobar el valor de TEXTSIZE
Puede verificar el TEXTSIZE
actual valor con @@TEXTSIZE
:
SELECT @@TEXTSIZE AS [Text Size];
Resultado:
+-------------+ | Text Size | |-------------| | 2048 | +-------------+
Ejemplo 3:cómo afecta los resultados de la consulta
Aquí hay un ejemplo que demuestra cómo TEXTSIZE
El valor puede afectar los resultados devueltos en un SELECT
consulta.
Primero, creemos una tabla, insertemos un texto y luego selecciónelo.
USE Test; CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTest VALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' ); SELECT * FROM TextSizeTest;
Resultado (normal):
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Dragonfruit | Dragonfruit | +-------------+--------------+---------------+
Esto es lo que normalmente esperaríamos. Devuelve el texto completo dentro de cada columna porque cada fila de texto ocupa menos de 2048 bytes (que es lo que establecí TEXTSIZE
en el ejemplo anterior).
Pero esto es lo que sucede si reduzco el TEXTSIZE
valor:
SET TEXTSIZE 4; SELECT * FROM TextSizeTest;
Resultado:
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Drag | Dr | +-------------+--------------+---------------+
La primera columna no se ve afectada porque no es una columna "máxima". Lo que quiero decir es que es un varchar(50) y no varchar(max) . El TEXTSIZE
la opción solo afecta a las columnas definidas con max
.
La segunda columna devuelve los primeros cuatro caracteres. Esto se debe a que configuramos el TEXTSIZE
valor a 4, y los primeros cuatro caracteres usan 4 bytes.
La tercera columna solo devuelve los primeros 2 caracteres. Esto se debe a que es un nvarchar columna. En este caso, los dos primeros caracteres utilizan 4 bytes.
Ejemplo 4:restablecer el valor
Una cosa a tener en cuenta es que especificar SET TEXTSIZE 0
en realidad lo "restablece" al valor predeterminado de 4096.
SET TEXTSIZE 0; SELECT @@TEXTSIZE AS [@@TEXTSIZE]; SELECT * FROM TextSizeTest;
Resultado:
+--------------+ | @@TEXTSIZE | |--------------| | 4096 | +--------------+ (1 row affected) +-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Dragonfruit | Dragonfruit | +-------------+--------------+---------------+ (1 row affected)