Har du använt SET TEXTSIZE
för att begränsa data som returneras av en fråga, men upptäckt att det bara inte verkar fungera? Du upptäcker att din SELECT
frågor fortsätter att returnera hela mängden text, oavsett TEXTSIZE
värde?
Läs vidare. Du kan göra detta uppenbara misstag.
När jag först stötte på TEXTSIZE
alternativet bestämde jag mig för att köra ett snabbtest. Men det fungerade inte. Jag försökte flera gånger med olika TEXTSIZE
värden, men ingenting verkade fungera.
"Varför fungerar det inte?" undrade jag.
Men så klickade det. Jag läste om dokumentationen och insåg att jag inte använde rätt strängstorlek för mina datatyper.
TEXTSIZE
fungerar endast på följande datatyper:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- text
- ntext
- bild
Om du tittar på de tre första, lägg märke till att de använder max
för argumentet. Det betyder att de använder den maximala strängen/lagringsstorleken.
Jag testade det mot kolumner av typen nvarchar(100) , varchar(255) , etc. Inte konstigt att det inte fungerade.
Exempel
Här är ett exempel för att visa vad jag menar.
ANVÄND Test; SLIP TABELL OM FINNS TextSizeTest;CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SET TEXTSIZE 4;SELECT * FROM TextSizeTest;
Resultat:
+-------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||-------------+------------------------------|| Dragonfruit | Dra | Dr |+-------------------------------------------+-------+Här ställer jag in
TEXTSIZE
värde till4
, men hela texten förvarchar(50)
kolumnen förblir intakt. Den här kolumnen påverkas inte avSET TEXTSIZE
. Och det är precis så det ska fungera.Det är bara de andra två kolumnerna som påverkas, eftersom de är
varchar(max)
ochnvarchar(max)
respektive.Också anledningen till nvarchar kolumnen är kortare än varchar beror på att den använder två byte för varje tecken (jämfört med varchar är en byte per tecken).
Så om du stöter på problem med
SET TEXTSIZE
, kontrollera din datatyp.