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

Brug SET TEXTSIZE til at begrænse de data, der returneres for hver række i SQL Server

I SQL Server er SET TEXTSIZE sætning angiver størrelsen på varchar(max) , nvarchar(max) , varbinary(max) , tekst , ntekst og billede data returneret af en SELECT erklæring.

Microsoft anbefaler denne tekst , ntekst og billede vil blive fjernet i en fremtidig version af SQL Server, så du bør undgå at bruge disse datatyper i nyt udviklingsarbejde og planlægge at ændre applikationer, der i øjeblikket bruger dem til at bruge varchar(max) , nvarchar(max) eller varbinary(max) i stedet.

Eksempel 1 – Grundlæggende brug

Her er et eksempel på indstilling af TEXTSIZE værdi.

SET TEXTSIZE 2048;

Det sætter TEXTSIZE til 2048 bytes.

Eksempel 2 – Tjek TEXTSIZE-værdien

Du kan tjekke den aktuelle TEXTSIZE værdi med @@TEXTSIZE :

VÆLG @@TEXTSIZE SOM [Tekststørrelse];

Resultat:

+--------------+| Tekststørrelse ||-------------|| 2048 |+--------------+

Eksempel 3 – Hvordan det påvirker forespørgselsresultaterne

Her er et eksempel, der viser, hvordan TEXTSIZE værdi kan påvirke resultaterne, der returneres i en SELECT forespørgsel.

Lad os først oprette en tabel, indsætte noget tekst og derefter vælge den.

USE Test;CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SELECT * FRA TextSizeTest;

Resultat (normalt):

+-------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||-------------+----------------------------|| Dragonfruit | Dragonfruit | Dragonfruit |+-------------+--------------+---------------+ 

Dette er, hvad vi normalt forventer. Det returnerer den fulde tekst inde i hver kolonne, fordi hver række af tekst fylder mindre end 2048 bytes (hvilket er, hvad jeg indstillede TEXTSIZE til i det foregående eksempel).

Men her er, hvad der sker, hvis jeg reducerer TEXTSIZE værdi:

INDSTIL TEKSTSTØRRELSE 4;VÆLG * FRA TextSizeTest;

Resultat:

+-------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||-------------+----------------------------|| Dragonfruit | Træk | Dr |+--------------------------+---------------+ 

Den første kolonne er upåvirket, fordi den ikke er en "max" kolonne. Hvad jeg mener er, det er en varchar(50) og ikke varchar(max) . TEXTSIZE indstillingen påvirker kun kolonner, der er defineret med max .

Den anden kolonne returnerer de første fire tegn. Dette skyldes, at vi indstiller TEXTSIZE værdi til 4, og de første fire tegn bruger 4 bytes.

Den tredje kolonne returnerer kun de første 2 tegn. Dette er fordi det er en nvarchar kolonne. I dette tilfælde bruger de to første tegn 4 bytes.

Eksempel 4 – Nulstil værdien

En ting du skal være opmærksom på er at angive SET TEXTSIZE 0 faktisk "nulstiller" den til standardværdien på 4096.

INDSTIL TEKSTSTØRRELSE 0;VÆLG @@TEKSTSTØRRELSE SOM [@@TEKSTSTØRRELSE]; VÆLG * FRA TextSizeTest;

Resultat:

+--------------+| @@TEXTSIZE ||-------------|| 4096 |+---------------+(1 række påvirket)+-------+------ --+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+----------------------------|| Dragonfruit | Dragonfruit | Dragonfruit |+-------------+--------------+--------------+(1 række påvirket)

  1. World Backup Day:4 interessante datatabsfakta at vide

  2. Tidsmæssigt databasedesign med et twist (live vs kladderækker)

  3. Oracle Database TLS1.2 / SSL-forbindelse ved hjælp af JDBC tynd og JKS

  4. Oracle-funktionseksempel for at få antal dage mellem to datoer