Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare SET TEXTSIZE per limitare i dati restituiti per ogni riga in SQL Server

In SQL Server, SET TEXTSIZE specifica la dimensione di varchar(max) , nvarchar(max) , variabile(max) , testo , ntesto e immagine dati restituiti da un SELECT dichiarazione.

Microsoft consiglia che sms , ntesto e immagine verrà rimosso in una versione futura di SQL Server, quindi dovresti evitare di utilizzare questi tipi di dati nei nuovi lavori di sviluppo e pianificare di modificare le applicazioni che attualmente li utilizzano per utilizzare varchar(max) , nvarchar(max) o varbinary(max) invece.

Esempio 1 – Utilizzo di base

Ecco un esempio di impostazione di TEXTSIZE valore.

SET TEXTSIZE 2048;

Ciò imposta TEXTSIZE a 2048 byte.

Esempio 2:verifica del valore TEXTSIZE

Puoi controllare il TEXTSIZE corrente valore con @@TEXTSIZE :

SELECT @@TEXTSIZE AS [Text Size];

Risultato:

+-------------+
| Text Size   |
|-------------|
| 2048        |
+-------------+

Esempio 3:come influisce sui risultati della query

Ecco un esempio che dimostra come TEXTSIZE value può influenzare i risultati restituiti in un SELECT interrogazione.

Per prima cosa creiamo una tabella, inseriamo del testo, quindi selezioniamola.

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

SELECT * FROM TextSizeTest;

Risultato (normale):

+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Dragonfruit  | Dragonfruit   |
+-------------+--------------+---------------+

Questo è ciò che normalmente ci aspetteremmo. Restituisce il testo completo all'interno di ogni colonna perché ogni riga di testo occupa meno di 2048 byte (che è ciò che ho impostato TEXTSIZE nell'esempio precedente).

Ma ecco cosa succede se riduco TEXTSIZE valore:

SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;

Risultato:

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

La prima colonna non è interessata, perché non è una colonna "max". Quello che voglio dire è che è un varchar(50) e non varchar(max) . Il TEXTSIZE opzione riguarda solo le colonne definite con max .

La seconda colonna restituisce i primi quattro caratteri. Questo perché impostiamo il TEXTSIZE valore a 4 e i primi quattro caratteri utilizzano 4 byte.

La terza colonna restituisce solo i primi 2 caratteri. Questo perché è un nvarchar colonna. In questo caso, i primi due caratteri utilizzano 4 byte.

Esempio 4 – Reimposta il valore

Una cosa da tenere presente è che specificando SET TEXTSIZE 0 in realtà lo "reimposta" sul valore predefinito di 4096.

SET TEXTSIZE 0;
SELECT @@TEXTSIZE AS [@@TEXTSIZE];
SELECT * FROM TextSizeTest;

Risultato:

+--------------+
| @@TEXTSIZE   |
|--------------|
| 4096         |
+--------------+
(1 row affected)
+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Dragonfruit  | Dragonfruit   |
+-------------+--------------+---------------+
(1 row affected)