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.