Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SET TEXTSIZE Не работи в SQL Server? Виж това.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхранявате директория/йерархия/дървовидна структура в базата данни?

  2. Предаване на параметър на xml низ към съхранената процедура на SQL Server

  3. Вмъкване на цялата DataTable в базата данни наведнъж вместо ред по ред?

  4. Кога бихте използвали функция с таблично значение?

  5. След блокиране на една транзакция между версиите на SQL Server