2009-01-08 11 views
0

J'ai une ligne xml ridiculement longue, il a> 800000 caractères. Le 'client' est aussi le 'serveur'. Le système d'exploitation est Windows 2k8 x64. La base de données a beaucoup de mémoire, tout comme le client. Le problème est qu'une fois que j'ai frappé un nombre magique de caractères - exactement 43679 caractères xml - la ligne renvoie ce qui APPARAIT être ''. je les appelle 'xml chars' car tout espace est évidemment enlevé par sql server quand il calcule la longueur - ce que je fais avec ce sql: len (convert (varchar (max), xsl)) Pourquoi le numéro est 43679 me déroute aussi ...sélection de xml à partir de SQL Server 2005 (ligne apparaît comme nulle)

Quelqu'un at-il ce problème? J'ai en fait attaché au même serveur avec Windows 2k3 et un autre serveur windows 2k8 et aucun problème sur une autre machine que celle-ci (le serveur lui-même).

J'ai également trouvé les résultats de la requête -> SQL Server -> résultats à la grille et définir la limite pour xml à «illimité» mais il semble ne pas encore «travailler» ... (ceux qui travaillent ont ce jeu à 2mb fyi)

Merci pour tous les commentaires - j'essaierai n'importe quoi ... cela n'empêche pas n'importe quoi de fonctionner - je suis sûr que c'est juste ce client mais il me rend fou! :)

MISE À JOUR: FYI - le problème n'est pas la conversion - je ne veux pas vraiment le convertir. la seule raison pour laquelle j'utilise convert dans cet exemple est d'utiliser len (len ne fonctionne pas sur les types de données xml) donc je peux trouver à quel point le xml est long.

Le problème est ...

INSERT INTO someTableForXml(theXml) 
VALUES ('<this><is><some><really>long xml</really></some></is></this>') 

maintenant copier et coller ce jusqu'à ce que vous avez environ 100 000 lignes de XML et insérez ... Lorsque je sélectionne les lignes arrière à l'aide:

SELECT * FROM someTableForXml 

Je récupère 1 ligne et dans la 'grille' j'obtiens un joli petit lien hypertexte pour le xml qui quand je clique dessus, me montre le "full xml" dans un nouvel onglet. Cependant pour MOI ... Une fois que je passe ce chiffre étrangement magique, il arrête de faire ça et semble simplement vide.

Répondre

0

Vous avez 2 questions distinctes je pense:

  1. comportement SSMS
  2. xml comversion

comportement SSMS

Essayez bcp à jeter dans un fichier et voir ce que vous obtenir. De cette façon, vous contournez SSMS et ses bizarreries.

Ou CONVERT pour varchar (max) si SSMS traite comme des données LOB (mais voir les informations suivante)

conversion xml Le 43679 est probablement causé par la conversion à varchar (max). Voir CAST AND CONVERT et le paramètre de style de CONVERT for XML. Le style par défaut "supprime l'espace blanc insignifiant" et vous n'avez pas de style ci-dessus.

Je pense que SSMS applique la longueur maximale de données non-LOB (65535) basée sur la colonne avec CONVERT correcte, mais l'affiche sans espace. D'où la discordance.

+0

J'apprécie votre temps. Merci. Malheureusement, je ne pense pas que ce soit pertinent, donc j'ai mis à jour la question originale avec plus de détails. – dovholuk

0

Je pense que c'est parce que vous n'avez pas le <?xml version="1.0" encoding="UTF-16"?> au début de votre XML.