Maison > base de données > tutoriel mysql > Pourquoi ma variable NVARCHAR(MAX) dans T-SQL ne contient-elle que 4 000 caractères ?

Pourquoi ma variable NVARCHAR(MAX) dans T-SQL ne contient-elle que 4 000 caractères ?

Susan Sarandon
Libérer: 2025-01-04 17:03:08
original
840 Les gens l'ont consulté

Why is my NVARCHAR(MAX) variable in T-SQL only holding 4000 characters?

Pourquoi est-ce que je n'obtiens que 4 000 caractères au lieu de 8 000 pour Nvarchar(Max) dans TSQL ?

Dans votre requête SQL, vous avez déclaré la variable @SQL1 comme NVARCHAR(Max) mais sont confrontés à un problème où il ne stocke que 4 000 caractères. Cela se produit en raison d'un comportement subtil dans TSQL concernant la conversion automatique des types de données lors de la concaténation.

Comprendre le problème :

  • Lorsque vous déclarez @SQL1 comme NVARCHAR(Max), il a la capacité de contenir 2 Go de données. Cependant, son type de données n'est pas réellement NVARCHAR(Max) jusqu'à ce que vous lui attribuiez une valeur.
  • Avant l'affectation, @SQL1 est essentiellement une collection de chaînes, chacune de moins de 4 000 caractères (dans votre cas, les constantes de votre requête).
  • Lorsque vous concaténez ces chaînes courtes avec des variables courtes, le type de données résultant reste comme NVARCHAR(4000) car chaque opération implique des chaînes qui sont moins de 4 000 caractères.
  • Par conséquent, lorsque vous attribuez finalement le résultat à @SQL1, le type de données reste NVARCHAR(4000), et vous vous retrouvez avec seulement 4 000 caractères.

Solution :

Pour garantir que @SQL1 devienne NVARCHAR(Max), vous devez vous assurer que les données que vous concaténez sur le côté droit sont également NVARCHAR(Max). Une façon de procéder consiste à convertir explicitement toutes les constantes ou variables en NVARCHAR(Max) avant la concaténation.

Par exemple, le code suivant entraînera correctement que @SQL1 soit NVARCHAR(Max) :

SET @SQL1 = N'';
SET @SQL1 = @SQL1 + CAST('SELECT DISTINCT Venue...,' AS NVARCHAR(MAX));
Copier après la connexion

Cela garantit que l'instruction SELECT est concaténée avec une chaîne qui a le type de données NVARCHAR(Max), forçant le résultat à être également NVARCHAR(Max).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal