2017-01-27 10 views
1

これをSQLテーブルに挿入するにはどうすればよいですか?SQLテーブルにXMLファイルを挿入する方法

<ITEM id="1" 
    name="Swimmer Head" 
    mesh_name="eq_head_swim" 
    totalpoint="0" 
    type="equip" 
    res_sex="m" 
    res_level="0" 
    slot="head" 
    weight="2" 
    bt_price="0" 
    hp="4" 
    ap="8" 
    maxwt="0" 
    sf="0" 
    fr="0" 
    cr="0" 
    pr="0" 
    lr="0" 
    color="#FFFFFFFF" 
    desc="Part of an everyday swimming outfit" /> 

また、このXMLファイルにはさらに多くの行があります。このため、1つの.sqlファイルでどうすればいいですか?

+1

あなたがこれをデシリアライズし、テーブルに構造を挿入する方法を求めている、またはあなたがXMLデータ型の列には、このXMLブロブを挿入する方法を求めているファイルからXMLをロードするには? – Siyual

+0

この構造体をテーブルに挿入したいと思います。 –

答えて

0

再尋ねるSiyualの質問に、しかし、より具体的な:

テーブルに行くべき多くのこの1行はありますか?

それは入れ子になっていませんか?

他の言葉で言えば、それは<ITEM id= [...] desc="something" />の繰り返しを続けますか?答えがyesの場合は、等号の後と二重引用符の間にあるものすべてを選択し、得られたビットをコンマで区切って連結し、<ITEM [...] />ごとに1行を作成するperlスクリプトを考えてみましょう。

このようにすれば、CSVファイルを読み込むことができます。もちろん、ターゲット表を最初に作成する必要があります。

+0

はい、行があります。あなたが望むなら私はあなたにXMLファイルを送ることができます。私は完全な初心者なので、私は少しガイドします。 –

3

ここにEAV構造体(エンティティ属性値)を与える1つの方法があります。

あなたは私だけONE重要な要素を特定する必要が気づくことがあります... ID

は、私は簡単にできるだけ

Declare @XML xml = ' 
<ITEM id="1" name="Swimmer Head" mesh_name="eq_head_swim" totalpoint="0" type="equip" res_sex="m" res_level="0" slot="head" weight="2" bt_price="0" color="#FFFFFFFF" desc="Part of an everyday swimming outfit" /> 
<ITEM id="2" name="Boxer Feet" mesh_name="eq_feet_boxer" totalpoint="0" type="equip" res_sex="m" res_level="0" slot="head" weight="2" bt_price="25.00" color="#FFFFFFFF" desc="Somthing for the boxer" /> 
' 

Select ID  = r.value('@id','int') 
     ,Item = attr.value('local-name(.)','varchar(100)') 
     ,Value = attr.value('.','varchar(max)') 
From @XML.nodes('/ITEM') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('id') 

戻り値を(いくつかの要素を切り捨てし、実証の目的のために2番目の項目を追加しました

enter image description here

)必要に応じて旋回させることが

EDIT -

Declare @XML xml 
Select @XML = BulkColumn FROM OPENROWSET(BULK 'C:\Working\SomeXMLFile.xml', SINGLE_BLOB) x; 

Select ID  = r.value('@id','int') 
     ,Item = attr.value('local-name(.)','varchar(100)') 
     ,Value = attr.value('.','varchar(max)') 
From @XML.nodes('/ITEM') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('id') 
+0

そして、どうすれば45k lines xmlファイルでそれを行うことができますか?必要に応じて、XMLファイルをアップロードして確認することができます。 –

+0

@ J.Litvak編集を参照して、ファイルとプロセスをTSQLにアップロードしてください。 –

関連する問題