Comment puis-je afficher l'intégralité du contenu d'un texte ou de colonne varchar(MAX) dans SQL Server 2008 Management Studio?
Dans ce live SQL Server 2008 (build 10.0.1600) de la base de données, il y a un Events
table, qui contient un text
colonne nommée Details
. (Oui, je me rends compte de ce qui devrait en fait être un varchar(MAX)
colonne, mais celui qui jeu de cette base de données ne permettait pas de le faire de cette façon.)
Cette colonne contient de très grands journaux des exceptions et des associés de données JSON que j'essaye d'accéder à l'aide de SQL Server Management Studio, mais à chaque fois que je copie les résultats de la grille à un éditeur de texte, il tronque à 43679 caractères.
J'ai lu à divers endroits sur l'Internet que vous pouvez définir votre Maximum de Caractères à extraire pour les Données XML dans Tools > Options > Query Results > SQL Server > Results To Grid
Illimitée, puis exécutez une requête comme ceci:
select Convert(xml, Details) from Events
where EventID = 13920
(À noter que les données de la colonne n'est pas XML à tous. CONVERT
ing la colonne XML est simplement une solution de contournement que j'ai trouvé de Googler que quelqu'un d'autre a utilisé pour contourner la limite de SSMS a partir de la récupération de données à partir d'un text
ou varchar(MAX)
colonne.)
Cependant, après le réglage de l'option ci-dessus, l'exécution de la requête, et en cliquant sur le lien dans le résultat, je reçois toujours le message d'erreur suivant:
Incapable de montrer XML. L'erreur suivante s'est passé:
Fin de fichier inattendue s'est produite. La ligne 5, la position 220160.Une solution consiste à augmenter le nombre de caractères récupérées à partir du serveur pour les données XML. Pour modifier ce paramètre, dans le menu Outils, cliquez sur Options.
Donc, aucune idée sur la façon d'accéder à ces données? Serait la conversion de la colonne à varchar(MAX)
corriger mes malheurs?
- J'ai l'habitude d'avoir une mesure de l'utilitaire de juste dans le but d'accéder à des champs de texte. C'était très ennuyeux.
Vous devez vous connecter pour publier un commentaire.
Un truc qui pourrait fonctionner dans bien des circonstances limitées, est tout simplement de nommage de la colonne dans une manière spéciale, comme ci-dessous.
Dans SSMS 2012 et 2014, cette affiche les résultats ci-dessous
Cliquer dessus ouvre les résultats complets dans la visionneuse XML. Défilement vers la droite montre le dernier caractère de B est préservée,
Toutefois, cela ne avoir des problèmes importants. Ajouter des colonnes supplémentaires à la requête des sauts de l'effet et de lignes supplémentaires deviennent tous concaténé avec la première. Enfin, si la chaîne contient des caractères tels que
<
l'ouverture de la visionneuse XML échoue avec une erreur d'analyse.Une façon plus robuste de faire ce qui évite les problèmes de SQL Server, conversion
<
à<
etc ou à défaut en raison de ces caractères est ci-dessous (crédit Adam Machanic ici).CDATA
peut fonctionner, mais si vos données contiennent des caractères de contrôle, vous devez effectuer une opération de remplacement. Dans mon cas, j'ai été en utilisant l'Unité de Séparateur, le Code ASCII 31, dans mes données. Depuis que je n'utilisais qu'un seul personnage dans de nombreux endroits, une simpleREPLACE(details, char(31), '&x1f;')
suffi. Si j'avais des caractères inconnus ou un grand nombre de caractères à remplacer, j'ai dû trouver une autre solution.CDATA
chose qui était ma première suggestion. Le plus tard, un desAS [processing-instruction(x)]
évite que.J'ai pu obtenir que cela fonctionne...
Une façon de contourner est de faire un clic droit sur le jeu de résultats et sélectionnez "Enregistrer les Résultats sous...". Il permet d'exporter vers un fichier CSV avec la totalité du contenu de la colonne. Pas parfait, mais suffisamment bien fonctionné pour moi.
Avez-vous essayé cette solution simple? Seulement 2 clics!
À la fenêtre de requête,
Vous bénéficiez de tout le texte que vous voulez voir dans le fichier!!! Je peux voir 130,556 caractères pour mon résultat de type varchar(MAX) champ
La solution la plus simple que j'ai trouvé est pour la sauvegarde de la table et d'afficher le script. Pour ce faire
Tasks
>Generate Scripts...
Next
Select specific database objects
et sélectionnez votre table.Next
Save scripts to a specific location
Save to file
et remplissez les options liées à laAdvanced
boutonGeneral
>Types of data to script
àData only
ouSchema and Data
et cliquez sur okNext
Le type de données TEXTE est vieux et ne doit pas être utilisé plus, c'est une douleur pour sélectionner les données d'une colonne de TEXTE.
ntext, du texte et de l'image (Transact-SQL)
vous devez utiliser TEXTPTR (Transact-SQL) pour récupérer les données de texte.
Voir aussi cet article sur La Manipulation Du Type De Données Texte.
varchar(MAX)
empêcher SSMS de tronquer les données qu'il contient?Il sonne comme le Xml ne peut pas être bien formé. Si c'est le cas, alors vous ne serez pas en mesure de le jeter comme Xml et étant donné que, vous êtes limité dans la façon dont beaucoup de texte, vous pouvez le retourner dans Management Studio. Cependant, vous pourriez briser le texte en petits morceaux comme:
Vous devez manuellement les combiner de nouveau.
MODIFIER
Il semble que il ya certains caractères dans le
text
données de l'analyseur Xml n'aime pas. Vous pouvez essayer de convertir ces valeurs à des entités et puis essayez de laConvert(xml, data)
truc. Donc quelque chose comme:(J'avais besoin de cast de type varchar(max), car la fonction de remplacement ne fonctionne pas sur
text
colonnes. Il ne devrait pas être une raison quelconque vous ne pouvez pas convertir cestext
colonnes àvarchar(max)
.)text
ouvarchar(MAX)
colonne.TSQL
de @IanQuigley basé sur cette réponse a bien fonctionné pour moi. En gros, j'ai pris les résultats (a fini par être 11 dossiers) et juste collé ensemble dans le bloc-notes. A parfaitement fonctionné. Besoin d'enregistrer ce script. J'ai eu quelques fous long XML qui comprenait des caractères non valides.Vous êtes hors de la chance, je pense. Le problème n'est pas un SQL problème au niveau de toutes les autres réponses semblent se concentrer, mais tout simplement l'un de l'interface utilisateur. Management Studio n'est pas destiné à un usage général /générique d'accès aux données de l'interface. Il n'est pas là pour être votre interface, mais votre zone d'administration, et il a de sérieuses limites de la manipulation des données binaires et les grandes données de test - parce que les gens de l'utiliser à l'intérieur du profil d'utilisation ne sera pas exécuté dans ce problème.
De présenter de grandes données de texte est tout simplement pas l'usage prévu.
Votre seul choix serait une fonction à valeur de table qui prend la saisie de texte et de coupe de lignes pour chaque ligne, de sorte que la Gestion de Studio permet d'obtenir une liste de lignes, pas une seule ligne.
Je préfère cette simple XML hack qui rend les colonnes cliquable dans SSMS sur une cellule par cellule de base. Avec cette méthode, vous pouvez afficher vos données rapidement dans SSMS de l'affichage sous forme de tableau et cliquez sur les cellules particulières, de voir la totalité de la valeur quand ils sont intéressants. C'est identique à l'OP de la technique de l'exception qu'il évite les erreurs XML.
À partir de SSMS 18.2, vous pouvez maintenant afficher jusqu'à 2 millions de caractères dans la grille des résultats. Source
J'ai vérifié avec le code ci-dessous.