sql >> Databasteknik >  >> RDS >> Sqlserver

Använd SET TEXTSIZE för att begränsa data som returneras för varje rad i SQL Server

I SQL Server, SET TEXTSIZE uttalande anger storleken på varchar(max) , nvarchar(max) , varbinary(max) , text , ntext och bild data som returneras av en SELECT uttalande.

Microsoft rekommenderar den texten , ntext och bild kommer att tas bort i en framtida version av SQL Server, så du bör undvika att använda dessa datatyper i nytt utvecklingsarbete och planera att modifiera applikationer som för närvarande använder dem för att använda varchar(max) , nvarchar(max) , eller varbinary(max) istället.

Exempel 1 – Grundläggande användning

Här är ett exempel på hur du ställer in TEXTSIZE värde.

SET TEXTSIZE 2048;

Det ställer in TEXTSIZE till 2048 byte.

Exempel 2 – Kontrollera TEXTSIZE-värdet

Du kan kontrollera den aktuella TEXTSIZE värde med @@TEXTSIZE :

VÄLJ @@TEXTSIZE SOM [Textstorlek];

Resultat:

+-------------+| Textstorlek ||-------------|| 2048 |+--------------+

Exempel 3 – Hur det påverkar frågeresultaten

Här är ett exempel som visar hur TEXTSIZE värde kan påverka resultaten som returneras i en SELECT fråga.

Låt oss först skapa en tabell, infoga lite text och sedan markera den.

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

Resultat (normalt):

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

Detta är vad vi normalt förväntar oss. Den returnerar hela texten i varje kolumn eftersom varje textrad tar upp mindre än 2048 byte (vilket är vad jag ställer in TEXTSIZE till i föregående exempel).

Men här är vad som händer om jag minskar TEXTSIZE värde:

SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Resultat:

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

Den första kolumnen påverkas inte, eftersom det inte är en "max" kolumn. Vad jag menar är att det är en varchar(50) och inte varchar(max) . TEXTSIZE alternativet påverkar endast kolumner som är definierade med max .

Den andra kolumnen returnerar de fyra första tecknen. Detta beror på att vi ställer in TEXTSIZE värde till 4, och de första fyra tecknen använder 4 byte.

Den tredje kolumnen returnerar bara de två första tecknen. Detta beror på att det är en nvarchar kolumn. I det här fallet använder de två första tecknen 4 byte.

Exempel 4 – Återställ värdet

En sak att vara medveten om är att specificera SET TEXTSIZE 0 "återställer" den faktiskt till standardvärdet 4096.

STÄLL IN TEXTSTORLEK 0;VÄLJ @@TEXTSTORLEK SOM [@@TEXTSTORLEK]; VÄLJ * FRÅN TextSizeTest;

Resultat:

+--------------+| @@TEXTSTORLEK ||--------------|| 4096 |+--------------+(1 rad påverkad)+-------+------------ --+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------------------------|| Dragonfruit | Dragonfruit | Dragonfruit |+-------------+--------------+--------------+(1 rad påverkad)

  1. JPA Tabellnamn med versaler

  2. Undviker nyckelordsliknande kolumnnamn i Postgres

  3. java.sql.SQLEundantag:ORA-03115:nätverksdatatyp eller representation som inte stöds

  4. Hur tar man bort accenter och alla tecken <> a..z i sql-server?