Използвали ли сте 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, проверете вашия тип данни.