Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SET TEXTSIZE Nie działa w programie SQL Server? Sprawdź to.

Czy użyłeś SET TEXTSIZE? ograniczyć dane zwracane przez zapytanie, ale okazało się, że to po prostu nie działa? Zauważasz, że Twój SELECT zapytania nadal zwracają pełną ilość tekstu, niezależnie od TEXTSIZE wartość?

Czytaj. Możesz popełnić ten oczywisty błąd.

Kiedy po raz pierwszy napotkałem TEXTSIZE opcji, postanowiłem przeprowadzić szybki test. Ale to nie zadziałało. Próbowałem kilka razy z różnymi TEXTSIZE wartości, ale nic nie działało.

„Dlaczego to nie działa?” Zastanawiałem się.

Ale potem kliknęło. Ponownie przeczytałem dokumentację i zdałem sobie sprawę, że nie używam prawidłowego rozmiaru ciągu dla moich typów danych.

TEXTSIZE działa tylko z następującymi typami danych:

  • varchar(maks.)
  • nvarchar(maks.)
  • zmienna (maks.)
  • tekst
  • ntekst
  • obraz

Jeśli spojrzysz na pierwsze trzy, zauważ, że używają max za argument. Oznacza to, że używają maksymalnego rozmiaru ciągu/pamięci.

Testowałem to z kolumnami typu nvarchar(100) , varchar(255) itp. Nic dziwnego, że to nie działało.

Przykład

Oto przykład, aby pokazać, o co mi chodzi.

USE Test; 
DROP TABLE IF EXISTS TextSizeTest;
CREATE TABLE TextSizeTest (
    varchar50 varchar(50),
    varcharMax varchar(max),
    nvarcharMax nvarchar(max)
    ); 
INSERT INTO TextSizeTest
VALUES (
    'Dragonfruit',
    'Dragonfruit',
    'Dragonfruit'
    );

SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;

Wynik:

+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Drag         | Dr            |
+-------------+--------------+---------------+

Tutaj ustawiłem TEXTSIZE wartość do 4 , ale pełny tekst varchar(50) kolumna pozostaje nienaruszona. Ta kolumna nie ma wpływu na SET TEXTSIZE . I tak właśnie ma działać.

Dotyczy to tylko dwóch pozostałych kolumn, ponieważ są to varchar(max) i nvarchar(max) odpowiednio.

Również powód nvarchar kolumna jest krótsza niż varchar dzieje się tak, ponieważ używa dwóch bajtów na każdy znak (w porównaniu z varchar jeden bajt na znak).

Więc jeśli masz problemy z SET TEXTSIZE , sprawdź typ danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CREATE TABLE IF NOT EXISTS odpowiednik w SQL Server

  2. Jaki jest najdłuższy możliwy numer telefonu na świecie, który powinienem wziąć pod uwagę w SQL varchar (długość) dla telefonu?

  3. SQL Server odpowiednik GROUP_CONCAT()

  4. Jak wykonać procedurę składowaną w programie C#?

  5. Jak tworzyć niestandardowe skróty w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL część 10