Използвали ли сте SET TEXTSIZE
за да ограничите данните, върнати от заявка, но открихте, че просто изглежда не работи? Откривате, че вашият SELECT
заявките продължават да връщат цялото количество текст, независимо от TEXTSIZE
стойност?
Прочетете нататък. Може да правите тази очевидна грешка.
Когато за първи път срещнах TEXTSIZE
опция, реших да направя бърз тест. Но не се получи. Опитах няколко пъти с различни TEXTSIZE
стойности, но изглежда нищо не работи.
„Защо не работи?“ Чудех се.
Но след това щракна. Прочетох отново документацията и разбрах, че не използвам правилния размер на низа за моите типове данни.
TEXTSIZE
работи само със следните типове данни:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- текст
- ntext
- изображение
Ако погледнете първите три, забележете, че използват max
за аргумента. Това означава, че те използват максималния низ/размер за съхранение.
Тествах го срещу колони от тип nvarchar(100) ,varchar(255) и т.н. Нищо чудно, че не работи.
Пример
Ето пример, за да демонстрирам какво имам предвид.
USE тест; ИЗПУСКАНЕ ТАБЛИЦА, АКО СЪЩЕСТВУВА TextSizeTest;СЪЗДАВАНЕ НА ТАБЛИЦА TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ('Dragonfruit', 'Dragonfruit', 'Dragonfruit' );ЗАДАДЕТЕ TEXTSIZE 4;ИЗБЕРЕТЕ * ОТ TextSizeTest;
Резултат:
+------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||------------+--------------+---------------|| Драконов плод | Плъзнете | д-р |+------------+--------------+--------------+предварително>Тук задавам
TEXTSIZE
стойност до4
, но пълният текст наvarchar(50)
колоната остава непокътната. Тази колона не се влияе отSET TEXTSIZE
. И точно така трябва да работи.Засегнати са само другите две колони, защото са
varchar(max)
иnvarchar(max)
съответно.Също така причината за nvarchar колоната е по-къса от varchar е, защото използва два байта за всеки знак (в сравнение с varchar е един байт на знак).
Така че, ако срещнете проблеми с
SET TEXTSIZE
, проверете вашия тип данни.