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 til4
, men den fulde tekst afvarchar(50)
kolonne forbliver intakt. Denne kolonne er upåvirket afSET 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)
ognvarchar(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.