Dans cette base de données SQL Server 2008 (build 10.0.1600) en direct, il y a une Events
table, qui contient une text
colonne nommée Details
. (Oui, je réalise que cela devrait en fait être une varchar(MAX)
colonne, mais celui qui a créé cette base de données ne l'a pas fait de cette façon.)
Cette colonne contient de très gros journaux d'exceptions et des données JSON associées auxquelles j'essaie d'accéder via SQL Server Management Studio, mais chaque fois que je copie les résultats de la grille dans un éditeur de texte, il les tronque à 43679 caractères.
J'ai lu à divers endroits sur Internet que vous pouvez définir votre nombre maximal de caractères récupérés pour les données XML Tools > Options > Query Results > SQL Server > Results To Grid
sur Illimité, puis effectuer une requête telle que celle-ci:
select Convert(xml, Details) from Events
where EventID = 13920
(Notez que les données sont une colonne n'est pas du tout XML. La CONVERT
conversion de la colonne en XML est simplement une solution de contournement que j'ai trouvée sur Google et que quelqu'un d'autre a utilisée pour contourner la limite que SSMS a de récupérer des données à partir d'une colonne text
ou varchar(MAX)
.)
Cependant, après avoir défini l'option ci-dessus, exécuté la requête et cliqué sur le lien dans le résultat, j'obtiens toujours l'erreur suivante:
Impossible d'afficher le XML. L'erreur suivante s'est produite: une fin de fichier inattendue s'est produite. Ligne 5, position 220160.
Une solution consiste à augmenter le nombre de caractères récupérés sur le serveur pour les données XML. Pour modifier ce paramètre, dans le menu Outils, cliquez sur Options.
Alors, une idée sur la façon d'accéder à ces données? Est-ce que convertir la colonne pour varchar(MAX)
résoudre mes problèmes?
la source
CDATA
peut fonctionner, mais si vos données incluent des caractères de contrôle, vous devez effectuer une opération de remplacement. Dans mon cas, j'utilisais le séparateur d'unité, code ASCII 31, dans mes données. Comme je n'utilisais que ce personnage dans de nombreux endroits, un simpleREPLACE(details, char(31), '&x1f;')
suffisait. Si j'avais des caractères inconnus ou un grand nombre de caractères différents à remplacer, j'aurais peut-être dû trouver une autre solution.CDATA
fut ma première suggestion. Le dernierAS [processing-instruction(x)]
évite cela.J'ai pu faire fonctionner cela ...
la source
Une solution consiste à cliquer avec le bouton droit sur le jeu de résultats et à sélectionner «Enregistrer les résultats sous ...». Cela l'exporte dans un fichier CSV avec tout le contenu de la colonne. Pas parfait mais a assez bien fonctionné pour moi.
la source
Avez-vous essayé cette solution simple? À seulement 2 clics!
Dans la fenêtre de requête,
Vous obtiendrez tout le texte que vous souhaitez voir dans le fichier !!! Je peux voir 130 556 caractères pour mon résultat d'un champ varchar (MAX)
la source
La solution de contournement la plus simple que j'ai trouvée est de sauvegarder la table et d'afficher le script. Pour faire ça
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 associéesAdvanced
boutonGeneral
>Types of data to script
surData only
ouSchema and Data
et cliquez sur OKNext
la source
Le type de données TEXT est ancien et ne devrait plus être utilisé, il est difficile de sélectionner des données dans une colonne TEXT.
ntext, texte et image (Transact-SQL)
vous devez utiliser TEXTPTR (Transact-SQL) pour récupérer les données texte.
Consultez également cet article sur la gestion du type de données texte .
la source
varchar(MAX)
empêchera-t-elle SSMS de tronquer les données de celle-ci?Il semble que le Xml ne soit pas bien formé. Si tel est le cas, vous ne pourrez pas le convertir au format Xml et, dans ce cas, vous êtes limité dans la quantité de texte que vous pouvez renvoyer dans Management Studio. Cependant, vous pouvez diviser le texte en petits morceaux comme ceci:
Vous devrez alors les combiner à nouveau manuellement.
ÉDITER
Il semble qu'il y ait des caractères dans les
text
données que l'analyseur XML n'aime pas. Vous pouvez essayer de convertir ces valeurs en entités, puis essayer l'Convert(xml, data)
astuce. Donc quelque chose comme:(J'avais besoin de convertir en varchar (max) car la fonction de remplacement ne fonctionnera pas sur
text
colonnes. Il ne devrait y avoir aucune raison pour laquelle vous ne pouvez pas convertir cestext
colonnesvarchar(max)
.)la source
text
ouvarchar(MAX)
.TSQL
de @IanQuigley basée sur cette réponse a bien fonctionné pour moi. J'ai essentiellement pris les résultats (au final 11 enregistrements) et je les ai simplement collés ensemble dans le Bloc-notes. A parfaitement fonctionné. Besoin de sauvegarder ce script. J'avais un long XML fou contenant des caractères invalides.Je préfère ce simple hack XML qui rend les colonnes cliquables dans SSMS cellule par cellule. Avec cette méthode, vous pouvez afficher vos données rapidement dans la vue tabulaire de SSMS et cliquer sur des cellules particulières pour voir la valeur complète lorsqu'elles sont intéressantes. Ceci est identique à la technique de l'OP sauf que cela évite les erreurs XML.
la source
NVARCHAR
/VARCHAR
. Par exemple, le caractère NUL (différent deNULL
comme valeur pour le champ). Le cast échouera pour les chaînes avec de telles valeurs incorporées.À partir de SSMS 18.2, vous pouvez désormais afficher jusqu'à 2 millions de caractères dans les résultats de la grille. La source
J'ai vérifié cela avec le code ci-dessous.
la source
Vous n'avez pas de chance, je pense. Le problème n'est pas un problème de niveau SQL comme toutes les autres réponses semblent se concentrer sur, mais simplement une de l'interface utilisateur. Management Studio n'est pas destiné à être une interface d'accès aux données générique / à usage général. Elle n'est pas là pour être votre interface, mais votre zone administrative, et elle présente de sérieuses limitations pour gérer les données binaires et les données de test volumineuses - car les personnes qui l'utilisent dans le profil d'utilisation spécifié ne rencontreront pas ce problème.
La présentation de données textuelles volumineuses n'est tout simplement pas l'utilisation prévue.
Votre seul choix serait une fonction de table qui prend l'entrée de texte et la coupe des lignes pour chaque ligne, de sorte que Management Studio obtienne une liste de lignes, pas une seule ligne.
la source