0
votes

Essayer d'obtenir un fichier XML dans une table SQL Server

J'ai un grand fichier XML que je souhaite entrer dans SQL Server, donc je l'interroge dans un format lisible pour un utilisateur final. J'ai commencé à démarrer sur une requête et je peux obtenir des données mais je ne peux pas obtenir le reste.

Ceci est un exemple d'ensemble de données de mon fichier XML P> xxx pré>

ceci est mon code actuel p> xxx pré>

i J'essaie d'obtenir une colonne pour chacun des éléments suivants P>

file/edxMsg/trnData/respCurrent/payDtl/cmpDtl 


3 commentaires

Veuillez clarifier "un format lisible pour un utilisateur final". Est Ce mur a un format lisible?


Salut Alex, qui aide mais la raison pour laquelle je me lance est parce que j'ai besoin du nom de famille DOB prénom pour être inclus pour chaque ligne afin que je sache à qui elle appartient .. c'est la partie que je ne sais pas comment faire ...


J'ai une question similaire lecture XML de SQL. La meilleure méthode consiste à utiliser un langage de programmation tel que C # pour analyser le fichier, puis écrivez de C # à la base de données.


3 Réponses :


0
votes

SQL Server fournit un type de données XML à stocker et à rechercher sur les données XML. Si vous souhaitez rechercher sur XML dans le serveur SQL, vous pouvez suivre ci-dessous étapes -

  1. Créez une table avec la colonne XML DataType
  2. Insérez XML dans cette table
  3. recherche sur des nœuds XML comme besoin

    Remarque: Si vous avez de grandes données, vous devez également créer des index XML sur la colonne XML pour améliorer la performance de recherche.

    Vous pouvez vous référer ci-dessous lien pour le code exemple

    Comment puis-je interroger une valeur dans Colonne SQL Server XML


2 commentaires

Comment allez-vous faire cela?


Regardez sur Ce mur de code . Il n'est pas nécessaire de faire "l'étape 1" et "pas"



0
votes

Vous devriez vraiment consulter le support XQuery intégré - et lancer l'ancienne et legacy openxml approche.

Essayez ceci pour obtenir tout le nœuds et extraire les informations détaillées d'eux: xxx

Ceci renvoie une liste de toutes les valeurs (trois colonnes CMP , CMPPAYAMNT , et CMPPAYCODE ) de votre XML, comme des données relationnelles appropriées, qui peuvent alors être par exemple inséré dans une table.


0 commentaires

1
votes

L'approche avec à partir de OpenXML code> (ainsi que les deux procédures pour préparer et supprimer un document XML) est obsolète et ne doit plus être utilisée (des rares exceptions exceptions).

Utilisez plutôt le Méthodes XML natif fournies par le type de données XML. P>

Essayez ceci: p>

SELECT A.msg.value('(edxMsgHdr/trnNm)[1]','nvarchar(10)') AS trnNm
      ,A.msg.value('(edxMsgHdr/trnAct)[1]','nvarchar(10)') AS trnAct
      ,A.msg.query('trnData') AS trnDataNode

      ,B.payDtl.value('(paySts)[1]','nvarchar(100)') AS paySts
      ,B.payDtl.value('(payType)[1]','nvarchar(100)') AS payType
      ,C.cmpDtl.value('(cmp)[1]','nvarchar(max)') AS cmp
      ,C.cmpDtl.value('(cmpPayAmt)[1]','decimal(10,4)') AS cmpPayAmt
FROM @xml.nodes('/file/edxMsg') A(msg)
CROSS APPLY A.msg.nodes('trnData/respCurrent/payDtl') B(payDtl)
CROSS APPLY B.payDtl.nodes('cmpDtl') C(cmpDtl)
  • Utilisez .value () code> pour récupérer une valeur de la XML LI>
  • Utilisez croix Appliquer yourxml.nodes ("Quelques xpath") code> pour transformer les éléments répétés en un ensemble dérivé. li>
  • Utilisez .Query () code> pour récupérer un fragment du XML LI> ul>

    Dans ce cas, j'ai utilisé .nodes () code> pour obtenir deux lignes de code>. Toutes les données de code> semble être 1: 1 code> associée, nous pouvons donc les choisir facilement en utilisant .value () p >

    La partie difficile sera le contenu de code>. p>

    Le premier message affiche un simple code> seulement, mais le Le deuxième message comprend une structure très complexe. P>

    Le problème est que cela nécessitera beaucoup de penser car il semble couvrir une structure associée complexe 1: N code> sur plusieurs tables. Tout élément répétitif (tel que code> ou code> doit être récupéré dans des listes dérivées. Le plus tard a imbriqué des éléments répétés nuls ( ) et il y a encore plus comme code> et code>. p>

    Une question comme ce qui suit vous aiderait à obtenir données de votre code>: p> xxx pré>

    En outre, vous devez connaître très bien le format EDXMSG, s'il y a peut-être des éléments Dans votre message non couvert par cet échantillon. P>

    Ainsi, nous pouvons offrir et expliquer les outils nécessaires pour extraire les données, mais vous devez vous connaître, quel format lisible em> est ... p> p>


1 commentaires

C'est génial, j'étais clairement très loin de la marque, merci de votre guidage et que vous dites maintenant, je dois savoir comment mettre ceci dans un format lisible .. Appréciez cela !!