Gestion des données longues VARCHAR(MAX) dans l'instruction PRINT de SQL Server
L'instruction PRINT
de SQL Server a une limitation : elle ne peut afficher qu'un maximum de 8 000 caractères. Cela pose un défi lorsque l’on travaille avec des données VARCHAR(MAX)
, qui peuvent stocker beaucoup plus. Toute tentative de PRINT
une VARCHAR(MAX)
valeur dépassant cette limite entraînera une troncature.
Une solution dynamique utilisant CAST et SUBSTRING
La solution consiste à décomposer dynamiquement les VARCHAR(MAX)
données en morceaux plus petits, chacun de moins de 8 000 caractères, et à les imprimer individuellement. Le code suivant illustre cette approche :
<code class="language-sql">DECLARE @Script VARCHAR(MAX); SELECT @Script = definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('usp_gen_data'); -- Replace 'usp_gen_data' with your stored procedure name DECLARE @PartsCount INT; DECLARE @PartSize INT; DECLARE @PartStartIndex INT; DECLARE @i INT = 1; SET @PartsCount = ROUND((LEN(@Script) - 1) / 8000, 0) + 1; SET @PartSize = CEILING((LEN(@Script) - 1) / @PartsCount, 0); SET @PartStartIndex = 1; WHILE @i <= @PartsCount BEGIN PRINT CAST(SUBSTRING(@Script, @PartStartIndex, @PartSize) AS NTEXT); SET @PartStartIndex = @PartStartIndex + @PartSize; SET @i = @i + 1; END;</code>
Ce code récupère d'abord les VARCHAR(MAX)
données. Il calcule ensuite le nombre de pièces nécessaires (@PartsCount
), la taille de chaque pièce (@PartSize
) et utilise une boucle WHILE
pour imprimer itérativement chaque pièce en utilisant SUBSTRING
et CAST
à NTEXT
pour gestion optimale des caractères Unicode. Cela garantit que la totalité de la valeur VARCHAR(MAX)
est affichée, quelle que soit sa longueur. N'oubliez pas de remplacer 'usp_gen_data'
par le nom réel de votre procédure stockée ou la source de votre longue chaîne.
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!