sql >> Databáze >  >> RDS >> Sqlserver

Použijte SET TEXTSIZE k omezení dat vrácených pro každý řádek na serveru SQL Server

V SQL Server, SET TEXTSIZE příkaz určuje velikost varchar(max) , nvarchar(max) , varbinary(max) , text , ntext a obrázek data vrácená SELECT prohlášení.

Společnost Microsoft doporučuje tento text , ntext a obrázek budou v budoucí verzi SQL Server odstraněny, takže byste se měli vyvarovat používání těchto datových typů v nových vývojových pracích a plánovat úpravu aplikací, které je aktuálně používají, aby používaly varchar(max) , nvarchar(max) nebo varbinary(max) místo toho.

Příklad 1 – Základní použití

Zde je příklad nastavení TEXTSIZE hodnotu.

SET TEXTSIZE 2048;

Tím se nastaví TEXTSIZE až 2048 bajtů.

Příklad 2 – Zkontrolujte hodnotu TEXTSIZE

Můžete zkontrolovat aktuální TEXTSIZE hodnotu s @@TEXTSIZE :

VYBERTE @@VELIKOST TEXTU JAKO [Velikost textu];

Výsledek:

+--------------+| Velikost textu ||--------------|| 2048 |+-------------+

Příklad 3 – Jak to ovlivní výsledky dotazu

Zde je příklad, který ukazuje, jak TEXTSIZE hodnota může ovlivnit výsledky vrácené v SELECT dotaz.

Nejprve vytvořte tabulku, vložte nějaký text a poté ji vyberte.

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

Výsledek (normální):

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

To je to, co bychom normálně očekávali. Vrací celý text uvnitř každého sloupce, protože každý řádek textu zabírá méně než 2048 bajtů (což je to, co jsem nastavil TEXTSIZE až v předchozím příkladu).

Ale co se stane, když zmenším TEXTSIZE hodnota:

SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Výsledek:

+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+--------------+--------------|| Dragonfruit | Přetáhnout | Dr |+-------------+--------------+---------------+ 

První sloupec není ovlivněn, protože se nejedná o sloupec „max“. Chci říct, že je to varchar(50) a ne varchar(max) . TEXTSIZE Tato možnost ovlivňuje pouze sloupce, které jsou definovány pomocí max .

Druhý sloupec vrací první čtyři znaky. Je to proto, že jsme nastavili TEXTSIZE hodnotu na 4 a první čtyři znaky používají 4 bajty.

Třetí sloupec vrací pouze první 2 znaky. Je to proto, že se jedná o nvarchar sloupec. V tomto případě první dva znaky používají 4 bajty.

Příklad 4 – Resetování hodnoty

Jedna věc, kterou je třeba si uvědomit, je, že specifikujete SET TEXTSIZE 0 ve skutečnosti jej „resetuje“ na výchozí hodnotu 4096.

SET TEXTSIZE 0;SELECT @@TEXTSIZE AS [@@TEXTSIZE];SELECT * FROM TextSizeTest;

Výsledek:

+---------------+| @@VELIKOST TEXTU ||---------------|| 4096 |+-------------+(dotčen 1 řádek)+-------------+------------ --+----------------+| varchar50 | varcharMax | nvarcharMax ||-------------+--------------+--------------|| Dragonfruit | Dragonfruit | Dragonfruit |+-------------+--------------+---------------+(1 dotčený řádek)

  1. OBJEDNAT PODLE seznamu hodnot IN

  2. Jak vyvinout offline první nativní aplikaci pro Android

  3. Je COUNT(rowid) rychlejší než COUNT(*)?

  4. Vytváří cizí klíč automaticky index?