sql >> Database >  >> RDS >> Sqlserver

Gebruik SET TEXTSIZE om de geretourneerde gegevens voor elke rij in SQL Server te beperken

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)

  1. TODATETIMEOFFSET() Voorbeelden in SQL Server

  2. Is er een manier om de JBoss-verbindingspool opnieuw te verbinden met Oracle wanneer de verbindingen slecht worden?

  3. Schone manier om postgresql-vensterfuncties in django ORM te gebruiken?

  4. Dynamisch (op kolommen gebaseerd) interval