sql >> Databasteknik >  >> RDS >> Sqlserver

SET TEXTSTORLEK Fungerar inte i SQL Server? Kontrollera detta.

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 till 4 , men hela texten för varchar(50) kolumnen förblir intakt. Den här kolumnen påverkas inte av SET TEXTSIZE . Och det är precis så det ska fungera.

Det är bara de andra två kolumnerna som påverkas, eftersom de är varchar(max) och nvarchar(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.


  1. Skripta all data från SQL Server-databasen

  2. Vad är anslutningssträngen för localdb för version 11

  3. 3 sätt att hitta rader som innehåller versaler i SQLite

  4. Göra dina databaskomponenter mycket tillgängliga (HA) via lastbalanserare