Dans SQL Server 2005, j'essaie d'interroger une colonne varchar (MAX) contenant des lignes contenant des données textuelles dépassant 8192. Pourtant, dans Management Studio, j'ai sous Outils -> Options -> Résultats de la requête -> Résultats en texte -> Nombre maximal de caractères affichés dans chaque colonne = 8192 , ce qui est un maximum. En conséquence, il semble que la troncature de ces lignes ne se produise qu'en raison de la limitation imposée par la sortie de texte.
La seule chose que je vois pour contourner cela est d’utiliser une fonction SUBSTRING pour saisir les 8 000 premiers caractères, puis les 8 000 suivants, etc. Mais c’est moche et sujet aux erreurs.
Je devrais mentionner que SSIS et BCP ne sont pas des options pour moi.
Quelqu'un a-t-il une meilleure suggestion? Merci!
Vous pouvez exporter les données dans un fichier à plat qui ne sera pas tronqué. Pour faire ça:
Les étapes restantes doivent être explicites. Cela créera le fichier en texte et vous pourrez l'ouvrir dans votre éditeur de texte favori.
J'utilise aussi XML mais une méthode légèrement différente qui résout la plupart des problèmes liés à l'habilitation XML.
declare @VeryLongText nvarchar(max) = '';
SELECT top 100 @VeryLongText = @VeryLongText + '
' + OBJECT_DEFINITION(object_id)
FROM sys.all_objects
WHERE type='P' and is_ms_shipped=1
SELECT LEN(@VeryLongText)
SELECT @VeryLongText AS [processing-instruction(x)] FOR XML PATH('')
PRINT @VeryLongText /*WILL be truncated*/
Assurez-vous que la limite de "données XML" dans SSMS est suffisamment élevée!
Je me suis précipité pour essayer d'exporter XML. C'est la solution que j'ai utilisée:
Sélectionnez l'option Résultat dans la grille, cliquez avec le bouton droit sur le lien qui apparaît dans le volet Résultats, puis sélectionnez Enregistrer les résultats sous, choisissez le type de fichier Tous les fichiers, nommez le fichier, puis cliquez sur Enregistrer. Toutes les données XML sont enregistrées correctement dans un fichier.
J'utilise SSMS 10 et je ne pouvais pas utiliser la solution de Torre. L'assistant d'exportation pensait que la colonne d'entrée était une image:
Le type de données pour la "colonne d'entrée" XML_F52E2B61-18A1-11d1-B105-00805F49916B "(26)" est DT_IMAGE
Ma solution était un peu détournée mais m'a amené là (tant que la sortie contient moins de 65 535 caractères):
UPDATE: Pour démontrer que cela fonctionne, voici un exemple de code SQL sélectionnant une seule colonne de 100 000 caractères. Si je sauvegarde la sortie de la grille dans un fichier csv, tous les 100 000 caractères y sont présents sans aucune troncature.
DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100)
SET @test = ''; SET @i = 100
WHILE @i < 100000
BEGIN
SET @test = @test + STUFF(REPLICATE('_', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar))
SET @i = @i + 100
END
SELECT @test
Remarques:
Avez-vous essayé cette solution simple? Seulement 2 clics!
À la fenêtre de requête,
Vous obtiendrez tout le texte que vous voulez voir dans le fichier !!! Je peux voir 130 556 caractères pour mon résultat d'un champ varchar (MAX)
J'utilise généralement XML pour obtenir une chaîne de débogage énorme en sortie (en utilisant le test de Luke):
declare @test nvarchar(max), @i int, @line nvarchar(100)
set @test = ''; set @i = 100
while @i < 100000
begin
set @test = @test + stuff(replicate('_', 98) + char(13) + char(10), 1, len(cast(@i as nvarchar)), cast(@i as nvarchar))
set @i = @i + 100
end
-- ctrl+d for "results to grid" then click the xml output
--select cast('<root>' + @test + '</root>' as xml)
-- revised
select @test for xml path(''), type;
Si je pouvais choisir, la requête renverrait les données sous la forme "Pour XML Auto" ou "Pour XML brut" ou "Pour XML explicite". Ainsi, les limites sont beaucoup plus élevées et vous pouvez faire beaucoup plus avec les résultats affichés.
Dans SSMS, si vous sélectionnez des données à partir d'une ligne, le nombre de caractères est limité, mais si vous modifiez des données à partir d'une ligne, la valeur complète sera présente. Il n’est peut-être pas toujours là, mais si vous ctrl-a, ctrl-c, passez-le dans un éditeur, tout sera là.
Une autre solution, utilisez HeidiSql pour ces requêtes délicates. Il n’a pas de limites dans la longueur du champ.
La troncature dont vous parlez ne se produit que dans Management Studio. Si vous tirez la colonne dans une autre application, elle ne sera pas tronquée.
Vous ne pouvez pas utiliser Query Analyzer pour parler à SQL Server 2005. Voulez-vous dire Management Studio?