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

SET TEXTSIZE ne fonctionne pas dans SQL Server ? Vérifiez ça.

Avez-vous utilisé SET TEXTSIZE limiter les données renvoyées par une requête, mais vous avez constaté que cela ne semble tout simplement pas fonctionner ? Vous constatez que votre SELECT les requêtes continuent de renvoyer la totalité du texte, quel que soit le TEXTSIZE valeur ?

Continuer à lire. Vous pourriez commettre cette erreur évidente.

Lorsque j'ai rencontré pour la première fois le TEXTSIZE option, j'ai décidé d'exécuter un test rapide. Mais cela n'a pas fonctionné. J'ai essayé plusieurs fois avec différents TEXTSIZE valeurs, mais rien ne semblait fonctionner.

"Pourquoi ça ne marche pas ?" Je me demandais.

Mais ensuite ça a cliqué. J'ai relu la documentation et réalisé que je n'utilisais pas la bonne taille de chaîne pour mes types de données.

Le TEXTSIZE ne fonctionne que sur les types de données suivants :

  • varchar(max)
  • nvarchar(max)
  • varbinaire(max)
  • texte
  • texte
  • image

Si vous regardez les trois premiers, notez qu'ils utilisent max pour l'argumentation. Cela signifie qu'ils utilisent la taille maximale de chaîne/stockage.

Je le testais sur des colonnes de type nvarchar(100) , varchar(255) , etc. Pas étonnant que cela ne fonctionne pas.

Exemple

Voici un exemple pour illustrer ce que je veux dire.

TEST UTILISER ; SUPPRIMER TABLE SI EXISTE TextSizeTest; CRÉER TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Résultat :

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

Ici, je mets le TEXTSIZE valeur à 4 , mais le texte complet du varchar(50) colonne reste intacte. Cette colonne n'est pas affectée par SET TEXTSIZE . Et c'est exactement comme ça que ça doit fonctionner.

Seules les deux autres colonnes sont affectées, car elles sont varchar(max) et nvarchar(max) respectivement.

Aussi, la raison pour laquelle le nvarchar la colonne est plus courte que le varchar est parce qu'il utilise deux octets pour chaque caractère (par rapport à varchar est un octet par caractère).

Donc, si vous rencontrez des problèmes avec SET TEXTSIZE , vérifiez votre type de données.