sql >> Database >  >> RDS >> Sqlserver

TEXTSIZE INSTELLEN Werkt niet in SQL Server? Controleer dit.

Heb je SET TEXTSIZE gebruikt? om de gegevens die door een zoekopdracht worden geretourneerd te beperken, maar ontdekte dat het gewoon niet lijkt te werken? Je merkt dat je SELECT zoekopdrachten blijven de volledige hoeveelheid tekst retourneren, ongeacht de TEXTSIZE waarde?

Lees verder. Je zou deze ene duidelijke fout kunnen maken.

Toen ik voor het eerst de TEXTSIZE . tegenkwam optie, besloot ik een snelle test uit te voeren. Maar het werkte niet. Ik heb het verschillende keren geprobeerd met verschillende TEXTSIZE waarden, maar niets leek te werken.

"Waarom werkt het niet?" Ik vroeg me af.

Maar toen klikte het. Ik las de documentatie opnieuw en realiseerde me dat ik niet de juiste tekenreeksgrootte gebruikte voor mijn gegevenstypen.

De TEXTSIZE werkt alleen op de volgende gegevenstypen:

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

Als je naar de eerste drie kijkt, merk je op dat ze max . gebruiken voor de argumentatie. Dit betekent dat ze de maximale string/opslaggrootte gebruiken.

Ik testte het tegen kolommen van het type nvarchar(100) , varchar(255) , enz. Geen wonder dat het niet werkte.

Voorbeeld

Hier is een voorbeeld om te laten zien wat ik bedoel.

USE Test; 
DROP TABLE IF EXISTS TextSizeTest;
CREATE TABLE TextSizeTest (
    varchar50 varchar(50),
    varcharMax varchar(max),
    nvarcharMax nvarchar(max)
    ); 
INSERT INTO TextSizeTest
VALUES (
    'Dragonfruit',
    'Dragonfruit',
    'Dragonfruit'
    );

SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;

Resultaat:

+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Drag         | Dr            |
+-------------+--------------+---------------+

Hier stel ik de TEXTSIZE in waarde tot 4 , maar de volledige tekst van de varchar(50) kolom blijft intact. Deze kolom wordt niet beïnvloed door SET TEXTSIZE . En dat is precies hoe het zou moeten werken.

Het zijn alleen de andere twee kolommen die worden beïnvloed, omdat ze varchar(max) . zijn en nvarchar(max) respectievelijk.

Ook de reden waarom de nvarchar kolom is korter dan de varchar is omdat het twee bytes gebruikt voor elk teken (vergeleken met varchar is één byte per teken).

Dus als u problemen ondervindt met SET TEXTSIZE , controleer uw gegevenstype.


  1. SQLite VACUM

  2. 3 manieren om een ​​waarde uit een JSON-document in SQLite te extraheren

  3. Belang van het onderhouden van een HIPAA-compatibele database

  4. Query om alle pakketten te doorzoeken op tabel en/of kolom