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

Използвайте SET TEXTSIZE, за да ограничите връщаните данни за всеки ред в SQL Server

В SQL Server, SET TEXTSIZE оператор определя размера на varchar(max) , nvarchar(max) ,варбинарна(макс.) , текст , ntext , иизображение данни, върнати от SELECT изявление.

Microsoft съветва този текст , ntext , иизображение ще бъде премахнат в бъдеща версия на SQL Server, така че трябва да избягвате използването на тези типове данни в нова разработка и да планирате да модифицирате приложенията, които в момента ги използват, за да използват varchar(max) , nvarchar(max) , или варбинарна(макс.) вместо това.

Пример 1 – Основна употреба

Ето пример за настройка на TEXTSIZE стойност.

ЗАДАДЕТЕ РАЗМЕР НА ТЕКСТА 2048;

Това задава TEXTSIZE до 2048 байта.

Пример 2 – Проверете стойността TEXTSIZE

Можете да проверите текущия TEXTSIZE стойност с @@TEXTSIZE :

ИЗБЕРЕТЕ @@TEXTSIZE КАТО [Размер на текста];

Резултат:

+------------+| Размер на текста ||------------|| 2048 |+-----------+

Пример 3 – Как влияе върху резултатите от заявката

Ето пример, който демонстрира как TEXTSIZE стойност може да повлияе на резултатите, върнати в SELECT заявка.

Първо нека създадем таблица, да вмъкнем текст и след това да го изберете.

ИЗПОЛЗВАЙТЕ тест;СЪЗДАЙТЕ ТАБЛИЦА TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max)); INSERT INTO TextSizeTestVALUES ('Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SELECT * FROM TextSizeTest;

Резултат (нормален):

+------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||------------+--------------+---------------|| Драконов плод | Драконов плод | Драконов плод |+------------+--------------+--------------+ 

Това е, което обикновено очакваме. Връща пълния текст във всяка колона, защото всеки ред текст заема по-малко от 2048 байта (което зададох TEXTSIZE до в предишния пример).

Но ето какво се случва, ако намаля TEXTSIZE стойност:

ЗАДАДЕТЕ TEXTSIZE 4;ИЗБЕРЕТЕ * ОТ TextSizeTest;

Резултат:

+------------+--------------+--------------+| varchar50 | varcharMax | nvarcharMax ||------------+--------------+---------------|| Драконов плод | Плъзнете | д-р |+------------+--------------+--------------+ 

Първата колона не е засегната, защото не е колона „макс“. Имам предвид, че това е varchar(50) а не varchar(max) . TEXTSIZE опцията засяга само колони, които са дефинирани с max .

Втората колона връща първите четири знака. Това е така, защото зададохме TEXTSIZE стойност до 4, а първите четири знака използват 4 байта.

Третата колона връща само първите 2 знака. Това е така, защото е nvarchar колона. В този случай първите два знака използват 4 байта.

Пример 4 – Нулиране на стойността

Едно нещо, което трябва да знаете, е, че указвате SET TEXTSIZE 0 всъщност го „нулира“ до стойността по подразбиране от 4096.

ЗАДАДЕТЕ TEXTSIZE 0;ИЗБЕРЕТЕ @@TEXTSIZE КАТО [@@TEXTSIZE];ИЗБЕРЕТЕ * ОТ TextSizeTest;

Резултат:

+--------------+| @@TEXTSIZE ||--------------|| 4096 |+--------------+(1 ред засегнат)+------------+------------ --+--------------+| varchar50 | varcharMax | nvarcharMax ||------------+--------------+---------------|| Драконов плод | Драконов плод | Драконов плод |+------------+--------------+--------------+(1 засегнат ред)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте „smalldatetime“ в „time“ в SQL Server (T-SQL примери)

  2. Как да предам параметри с стойност на таблица от java към запаметена процедура на sql сървър?

  3. Какво е новото в SQL Server 2019?

  4. ISDATE() Примери в SQL Server

  5. Как да разбера какво заключва масите ми?