Hai usato SET TEXTSIZE
limitare i dati restituiti da una query, ma hai scoperto che non sembra funzionare? Stai scoprendo che il tuo SELECT
le query continuano a restituire l'intera quantità di testo, indipendentemente da TEXTSIZE
valore?
Continuare a leggere. Potresti commettere questo errore ovvio.
Quando ho incontrato per la prima volta TEXTSIZE
opzione, ho deciso di eseguire un rapido test. Ma non ha funzionato. Ho provato diverse volte con vari TEXTSIZE
valori, ma niente sembrava funzionare.
"Perché non funziona?" mi chiedevo.
Ma poi ha cliccato. Ho riletto la documentazione e mi sono reso conto che non stavo usando la dimensione della stringa corretta per i miei tipi di dati.
Il TEXTSIZE
funziona solo sui seguenti tipi di dati:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- testo
- ntesto
- immagine
Se guardi i primi tre, nota che usano max
per l'argomento. Ciò significa che utilizzano la dimensione massima di stringa/memoria.
Lo stavo testando su colonne di tipo nvarchar(100) , varchar(255) , ecc. Non c'è da stupirsi che non funzionasse.
Esempio
Ecco un esempio per dimostrare cosa intendo.
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;
Risultato:
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Drag | Dr | +-------------+--------------+---------------+
Qui, ho impostato il TEXTSIZE
valore a 4
, ma il testo completo di varchar(50)
la colonna rimane intatta. Questa colonna non è influenzata da SET TEXTSIZE
. Ed è proprio così che dovrebbe funzionare.
Sono solo le altre due colonne interessate, perché sono varchar(max)
e nvarchar(max)
rispettivamente.
Inoltre, il motivo per nvarchar la colonna è più corta di varchar è perché utilizza due byte per ogni carattere (rispetto a varchar è un byte per carattere).
Quindi, se riscontri problemi con SET TEXTSIZE
, controlla il tuo tipo di dati.