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
TEXTSIZEhodnotu 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.