Maison > base de données > tutoriel mysql > Pourquoi NVARCHAR(MAX) tronque-t-il toujours mes chaînes dans SQL Server ?

Pourquoi NVARCHAR(MAX) tronque-t-il toujours mes chaînes dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-06 20:15:41
original
338 Les gens l'ont consulté

Why Does NVARCHAR(MAX) Still Truncate My Strings in SQL Server?

"La troncature NVARCHAR(MAX) se produit toujours : compréhension de la conversion implicite"

Malgré l'idée fausse selon laquelle NVARCHAR(MAX) dans les versions modernes de SQL Server contient des données substantielles, les utilisateurs peuvent rencontrer une troncature à 4 000 caractères comme dans celui-ci exemple :

DECLARE @Query NVARCHAR(max);
SET @Query = 'SELECT...' -- some of the query gets set here
SET @Query = @Query + '...' -- more query gets added on, etc.

-- later on...
PRINT LEN(@Query) -- Prints out 4273, which is correct as far as I can tell
PRINT @Query      -- Truncates value to 4000 characters
EXEC sp_executesql @Query -- totally crashes due to malformed (truncated) query
Copier après la connexion

La cause profonde : conversion implicite

Le problème vient de la conversion implicite. Lors de la concaténation de chaînes avec des caractères Unicode, SQL Server convertit automatiquement le résultat en NVARCHAR(4000) sans avertissement ni indication de troncature. Cela se produit même lorsque la variable déclarée pour stocker le résultat est NVARCHAR(MAX).

Solution : Appliquer la conversion explicite

Pour empêcher la conversion implicite et garantir la conservation des données volumineuses données, toujours pré-concaténer à l'aide de CAST :

SET @Query = CAST('' as nVarChar(MAX)) -- Force implicit conversion to nVarChar(MAX)
           + 'SELECT...' -- some of the query gets set here
           + '...' -- more query gets added on, etc.
Copier après la connexion

En convertissant une chaîne vide en NVARCHAR(MAX), SQL Server est explicitement chargé de gérer la chaîne entière comme NVARCHAR(MAX). Cela élimine le problème de troncature.

Autres considérations

  • Évitez les chaînes littérales de plus de 4 000 caractères (ou 8 000 pour VarChar) pour éviter la troncature.
  • Divisez les grosses chaînes en morceaux plus petits pour garantir le succès concaténation.

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