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

Użyj SET TEXTSIZE, aby ograniczyć dane zwracane dla każdego wiersza w SQL Server

W SQL Server SET TEXTSIZE instrukcja określa rozmiar varchar(max) , nvarchar(maks.) , zmienna (maks.) , tekst , ntekst i obraz dane zwrócone przez SELECT oświadczenie.

Microsoft radzi, aby tekst , ntekst i obraz zostaną usunięte w przyszłej wersji SQL Server, więc należy unikać używania tych typów danych w nowych pracach programistycznych i planować modyfikowanie aplikacji, które obecnie ich używają, tak aby używały varchar(max) , nvarchar(maks.) lub zmienna (maks.) zamiast tego.

Przykład 1 – Podstawowe użycie

Oto przykład ustawienia TEXTSIZE wartość.

SET TEXTSIZE 2048;

To ustawia TEXTSIZE do 2048 bajtów.

Przykład 2 – Sprawdź wartość TEXTSIZE

Możesz sprawdzić aktualny TEXTSIZE wartość z @@TEXTSIZE :

SELECT @@TEXTSIZE AS [Text Size];

Wynik:

+-------------+
| Text Size   |
|-------------|
| 2048        |
+-------------+

Przykład 3 – jak to wpływa na wyniki zapytania

Oto przykład, który pokazuje, jak TEXTSIZE wartość może wpływać na wyniki zwracane w SELECT zapytanie.

Najpierw utwórzmy tabelę, wstawmy tekst, a następnie zaznaczmy.

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

SELECT * FROM TextSizeTest;

Wynik (normalny):

+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Dragonfruit  | Dragonfruit   |
+-------------+--------------+---------------+

Tego zwykle byśmy się spodziewali. Zwraca pełny tekst wewnątrz każdej kolumny, ponieważ każdy wiersz tekstu zajmuje mniej niż 2048 bajtów (co ustawiłem TEXTSIZE w poprzednim przykładzie).

Ale oto, co się stanie, jeśli zmniejszę TEXTSIZE wartość:

SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;

Wynik:

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

Pierwsza kolumna pozostaje nienaruszona, ponieważ nie jest to kolumna „maks”. Mam na myśli to, że jest to varchar(50) a nie varchar(max) . TEXTSIZE opcja wpływa tylko na kolumny zdefiniowane za pomocą max .

Druga kolumna zwraca pierwsze cztery znaki. Dzieje się tak, ponieważ ustawiamy TEXTSIZE wartość na 4, a pierwsze cztery znaki używają 4 bajtów.

Trzecia kolumna zwraca tylko pierwsze 2 znaki. Dzieje się tak, ponieważ jest to nvarchar kolumna. W tym przypadku pierwsze dwa znaki używają 4 bajtów.

Przykład 4 – Zresetuj wartość

Należy pamiętać, że określenie SET TEXTSIZE 0 faktycznie „resetuje” go do domyślnej wartości 4096.

SET TEXTSIZE 0;
SELECT @@TEXTSIZE AS [@@TEXTSIZE];
SELECT * FROM TextSizeTest;

Wynik:

+--------------+
| @@TEXTSIZE   |
|--------------|
| 4096         |
+--------------+
(1 row affected)
+-------------+--------------+---------------+
| varchar50   | varcharMax   | nvarcharMax   |
|-------------+--------------+---------------|
| Dragonfruit | Dragonfruit  | Dragonfruit   |
+-------------+--------------+---------------+
(1 row affected)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dołączanie do rekordu daty MAX w grupie

  2. Jak wyłączyć wszystkie ograniczenia wyboru i klucza obcego dla tabeli w programie SQL Server (przykłady T-SQL)

  3. Opóźniona trwałość w SQL Server 2014

  4. Jak utworzyć ograniczenie sprawdzania w pojedynczej kolumnie w SQL Server — samouczek SQL Server/TSQL — część 83

  5. Skonfiguruj zadania SQL w SQL Server za pomocą T-SQL