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
795 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!

source:php.cn
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