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

IMPOSTA FORMATO TESTO Non funziona in SQL Server? Verificare questo.

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.