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 medmax
.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)