Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie SET TEXTSIZE, um die für jede Zeile in SQL Server zurückgegebenen Daten zu begrenzen

In SQL Server ist das SET TEXTSIZE -Anweisung gibt die Größe von varchar(max) an , nvarchar(max) , varbinary(max) , Text , ntext und Bild Daten, die von einem SELECT zurückgegeben werden Aussage.

Microsoft empfiehlt diesen Text , ntext und Bild wird in einer zukünftigen Version von SQL Server entfernt, daher sollten Sie die Verwendung dieser Datentypen in neuen Entwicklungsarbeiten vermeiden und planen, Anwendungen, die sie derzeit verwenden, so zu ändern, dass sie varchar(max) verwenden , nvarchar(max) , oder varbinary(max) stattdessen.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel für die Einstellung von TEXTSIZE Wert.

SETZE TEXTSGRÖSSE 2048;

Das setzt TEXTSIZE bis 2048 Byte.

Beispiel 2 – Überprüfen Sie den TEXTSIZE-Wert

Sie können die aktuelle TEXTSIZE überprüfen Wert mit @@TEXTSIZE :

SELECT @@TEXTSIZE AS [Textgröße];

Ergebnis:

+-------------+| Textgröße ||-------------|| 2048 |+---------------------+

Beispiel 3 – Auswirkungen auf die Abfrageergebnisse

Hier ist ein Beispiel, das zeigt, wie die TEXTSIZE -Wert kann die in einem SELECT zurückgegebenen Ergebnisse beeinflussen Abfrage.

Lassen Sie uns zuerst eine Tabelle erstellen, Text einfügen und ihn dann auswählen.

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

Ergebnis (normal):

+-------------+-------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Drachenfrucht | Drachenfrucht | Drachenfrucht |+-------------+-------------+---------------+ 

Das würden wir normalerweise erwarten. Es gibt den vollständigen Text in jeder Spalte zurück, da jede Textzeile weniger als 2048 Bytes belegt (was ich mit TEXTSIZE eingestellt habe zu im vorherigen Beispiel).

Aber Folgendes passiert, wenn ich TEXTSIZE reduziere Wert:

SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Ergebnis:

+-------------+-------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Drachenfrucht | Ziehen Sie | Dr. |+-------------+-------------+---------------+ 

Die erste Spalte ist nicht betroffen, da es sich nicht um eine „Max“-Spalte handelt. Was ich meine ist, es ist ein varchar(50) und nicht varchar(max) . Die TEXTSIZE Option wirkt sich nur auf Spalten aus, die mit max definiert sind .

Die zweite Spalte gibt die ersten vier Zeichen zurück. Das liegt daran, dass wir die TEXTSIZE gesetzt haben Wert auf 4, und die ersten vier Zeichen verwenden 4 Bytes.

Die dritte Spalte gibt nur die ersten 2 Zeichen zurück. Das liegt daran, dass es sich um ein nvarchar handelt Säule. In diesem Fall verwenden die ersten beiden Zeichen 4 Bytes.

Beispiel 4 – Wert zurücksetzen

Eine Sache, die Sie beachten sollten, ist die Angabe von SET TEXTSIZE 0 tatsächlich „setzt“ es auf den Standardwert von 4096 zurück.

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

Ergebnis:

+--------------+| @@TEXTSIZE ||--------------|| 4096 |+-------------+(1 Zeile betroffen)+-------------+------------ --+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Drachenfrucht | Drachenfrucht | Drachenfrucht |+-------------+-------------+---------------+(1 Zeile betroffen)