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

INDSTIL TEKSTSTØRRELSE Virker ikke i SQL Server? Tjek det her.

Har du brugt SET TEXTSIZE at begrænse de data, der returneres af en forespørgsel, men fandt ud af, at det bare ikke ser ud til at virke? Du opdager, at din SELECT forespørgsler fortsætter med at returnere den fulde mængde tekst, uanset TEXTSIZE værdi?

Læs videre. Du kan begå denne ene åbenlyse fejl.

Da jeg første gang stødte på TEXTSIZE mulighed, besluttede jeg at køre en hurtig test. Men det virkede ikke. Jeg prøvede flere gange med forskellige TEXTSIZE værdier, men intet så ud til at virke.

"Hvorfor virker det ikke?" Jeg undrede mig.

Men så klikkede det. Jeg læste dokumentationen igen og indså, at jeg ikke brugte den korrekte strengstørrelse til mine datatyper.

TEXTSIZE virker kun på følgende datatyper:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • tekst
  • ntekst
  • billede

Hvis du ser på de første tre, skal du bemærke, at de bruger max for argumentet. Det betyder, at de bruger den maksimale streng/lagerstørrelse.

Jeg testede det mod kolonner af typen nvarchar(100) , varchar(255) osv. Ikke underligt, at det ikke virkede.

Eksempel

Her er et eksempel for at vise, hvad jeg mener.

BRUG Test; DROP TABLE IF EXISTS 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 | Træk | Dr |+--------------------------+---------------+ 

Her indstiller jeg TEXTSIZE værdi til 4 , men den fulde tekst af varchar(50) kolonne forbliver intakt. Denne kolonne er upåvirket af SET TEXTSIZE . Og det er præcis sådan, det skal fungere.

Det er kun de to andre kolonner, der er berørt, fordi de er varchar(max) og nvarchar(max) hhv.

Også grunden til nvarchar kolonnen er kortere end varchar er fordi den bruger to bytes for hvert tegn (sammenlignet med varchar 's én byte pr. tegn).

Så hvis du støder på problemer med SET TEXTSIZE , tjek din datatype.


  1. FROM_UNIXTIME() Eksempler – MySQL

  2. Sådan uploader og downloader du filer PHP og MySQL

  3. Kan jeg bruge ADFS 2.0 til at godkende visse brugere mod SQL Server?

  4. Sådan finder du ud af, om der findes en værdi i en VARRAY