Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisez SET TEXTSIZE pour limiter les données renvoyées pour chaque ligne dans SQL Server

Dans SQL Server, le SET TEXTSIZE l'instruction spécifie la taille de varchar(max) , nvarchar(max) , varbinaire(max) , texte , texte , et image données renvoyées par un SELECT déclaration.

Microsoft conseille que le texte , texte , et image seront supprimés dans une future version de SQL Server, vous devez donc éviter d'utiliser ces types de données dans de nouveaux travaux de développement et prévoir de modifier les applications qui les utilisent actuellement pour utiliser varchar(max) , nvarchar(max) , ou varbinary(max) à la place.

Exemple 1 - Utilisation de base

Voici un exemple de définition de TEXTSIZE valeur.

SET TEXTSIZE 2048 ;

Cela définit TEXTSIZE à 2048 octets.

Exemple 2 - Vérifier la valeur TEXTSIZE

Vous pouvez vérifier le TEXTSIZE actuel valeur avec @@TEXTSIZE :

SELECT @@TEXTSIZE AS [Taille du texte] ;

Résultat :

+-------------+| Taille du texte ||-------------|| 2048 |+-------------+

Exemple 3 - Comment cela affecte les résultats de la requête

Voici un exemple qui montre comment le TEXTSIZE la valeur peut affecter les résultats renvoyés dans un SELECT requête.

Commençons par créer un tableau, insérons du texte, puis sélectionnons-le.

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

Résultat (normal) :

+-------------+-------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Fruit du dragon | Fruit du dragon | Fruit du dragon |+-------------+-------------+---------------+ 

C'est ce à quoi nous nous attendons normalement. Il renvoie le texte intégral à l'intérieur de chaque colonne car chaque ligne de texte occupe moins de 2048 octets (c'est ce que j'ai défini TEXTSIZE à dans l'exemple précédent).

Mais voici ce qui se passe si je réduis le TEXTSIZE valeur :

SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Résultat :

+-------------+-------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Fruit du dragon | Faites glisser | Dr |+-------------+-------------+---------------+ 

La première colonne n'est pas affectée, car ce n'est pas une colonne "max". Ce que je veux dire, c'est qu'il s'agit d'un varchar(50) et non varchar(max) . Le TEXTSIZE l'option n'affecte que les colonnes définies avec max .

La deuxième colonne renvoie les quatre premiers caractères. C'est parce que nous avons défini le TEXTSIZE valeur à 4, et les quatre premiers caractères utilisent 4 octets.

La troisième colonne ne renvoie que les 2 premiers caractères. C'est parce que c'est un nvarchar colonne. Dans ce cas, les deux premiers caractères utilisent 4 octets.

Exemple 4 - Réinitialiser la valeur

Une chose à savoir est que spécifier SET TEXTSIZE 0 en fait le "réinitialise" à la valeur par défaut de 4096.

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

Résultat :

+--------------+| @@TAILLETEXTE ||--------------|| 4096 |+--------------+(1 ligne affectée)+-------------+------------ --+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Fruit du dragon | Fruit du dragon | Fruit du dragon |+-------------+-------------+---------------+(1 ligne affectée)