Použili jste SET TEXTSIZE
omezit data vrácená dotazem, ale zjistili jste, že to prostě nefunguje? Zjišťujete, že váš SELECT
dotazy nadále vracejí celé množství textu bez ohledu na TEXTSIZE
hodnotu?
Číst dál. Možná děláte tuto zjevnou chybu.
Když jsem poprvé narazil na TEXTSIZE
možnost, rozhodl jsem se provést rychlý test. Ale nefungovalo to. Zkoušel jsem to několikrát s různými TEXTSIZE
hodnoty, ale zdálo se, že nic nefunguje.
"Proč to nefunguje?" Přemýšlel jsem.
Ale pak to klaplo. Znovu jsem si přečetl dokumentaci a uvědomil jsem si, že pro své datové typy nepoužívám správnou velikost řetězce.
TEXTSIZE
funguje pouze na následujících typech dat:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- text
- ntext
- obrázek
Pokud se podíváte na první tři, všimněte si, že používají max
za argument. To znamená, že používají maximální velikost řetězce/úložiště.
Testoval jsem to proti sloupcům typu nvarchar(100) , varchar(255) atd. Není divu, že to nefungovalo.
Příklad
Zde je příklad, který demonstruje, co tím myslím.
USE Test; DROP TABLE IF EXISTS TextSizeTest;CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SET TEXTSIZE 4;SELECT * FROM TextSizeTest;
Výsledek:
+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+--------------+--------------|| Dragonfruit | Přetáhnout | Dr |+-------------+--------------+---------------+Zde nastavím
TEXTSIZE
hodnotu na4
, ale celý textvarchar(50)
sloup zůstává nedotčen. Tento sloupec není ovlivněnSET TEXTSIZE
. A přesně tak to má fungovat.Jsou ovlivněny pouze další dva sloupce, protože jsou
varchar(max)
anvarchar(max)
respektive.Také důvod nvarchar sloupec je kratší než varchar je to proto, že používá dva bajty pro každý znak (ve srovnání s varchar ‘je jeden bajt na znak).
Pokud tedy narazíte na problémy s
SET TEXTSIZE
, zkontrolujte typ dat.