In SQL Server, de SET TEXTSIZE
statement specificeert de grootte van varchar(max) , nvarchar(max) , varbinary(max) , tekst , ntekst , en afbeelding gegevens geretourneerd door een SELECT
verklaring.
Microsoft adviseert dat tekst , ntekst , en afbeelding wordt verwijderd in een toekomstige versie van SQL Server, dus u moet het gebruik van deze gegevenstypen in nieuw ontwikkelingswerk vermijden en van plan zijn om toepassingen die ze momenteel gebruiken aan te passen om varchar(max) te gebruiken , nvarchar(max) , of varbinary(max) in plaats daarvan.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld van het instellen van de TEXTSIZE
waarde.
SET TEXTSIZE 2048;
Dat stelt TEXTSIZE
. in tot 2048 bytes.
Voorbeeld 2 – Controleer de TEXTSIZE-waarde
U kunt de huidige TEXTSIZE
. controleren waarde met @@TEXTSIZE
:
SELECT @@TEXTSIZE AS [Text Size];
Resultaat:
+-------------+ | Text Size | |-------------| | 2048 | +-------------+
Voorbeeld 3 – Hoe dit de resultaten van zoekopdrachten beïnvloedt
Hier is een voorbeeld dat laat zien hoe de TEXTSIZE
waarde kan van invloed zijn op de resultaten die worden geretourneerd in een SELECT
vraag.
Laten we eerst een tabel maken, wat tekst invoegen en deze vervolgens selecteren.
USE Test; CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTest VALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' ); SELECT * FROM TextSizeTest;
Resultaat (normaal):
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Dragonfruit | Dragonfruit | +-------------+--------------+---------------+
Dit is wat we normaal zouden verwachten. Het retourneert de volledige tekst in elke kolom omdat elke rij tekst minder dan 2048 bytes in beslag neemt (wat ik heb ingesteld TEXTSIZE
naar in het vorige voorbeeld).
Maar dit is wat er gebeurt als ik de TEXTSIZE
verklein waarde:
SET TEXTSIZE 4; SELECT * FROM TextSizeTest;
Resultaat:
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Drag | Dr | +-------------+--------------+---------------+
De eerste kolom wordt niet beïnvloed, omdat het geen "max" -kolom is. Wat ik bedoel is, het is een varchar(50) en niet varchar(max) . De TEXTSIZE
optie heeft alleen invloed op kolommen die zijn gedefinieerd met max
.
De tweede kolom retourneert de eerste vier tekens. Dit komt omdat we de TEXTSIZE
. hebben ingesteld waarde op 4, en de eerste vier tekens gebruiken 4 bytes.
De derde kolom retourneert alleen de eerste 2 tekens. Dit komt omdat het een nvarchar . is kolom. In dit geval gebruiken de eerste twee tekens 4 bytes.
Voorbeeld 4 – Reset de waarde
Een ding om op te letten is dat het specificeren van SET TEXTSIZE 0
eigenlijk "reset" het naar de standaardwaarde van 4096.
SET TEXTSIZE 0; SELECT @@TEXTSIZE AS [@@TEXTSIZE]; SELECT * FROM TextSizeTest;
Resultaat:
+--------------+ | @@TEXTSIZE | |--------------| | 4096 | +--------------+ (1 row affected) +-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Dragonfruit | Dragonfruit | +-------------+--------------+---------------+ (1 row affected)