2016-10-31 4 views
2

私はXML列を持つSQLテーブルを持っています。列の値は次のようになります。SQLのXMLノード値を別々の行に分離

<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup> 

各StudentIDを1行ではなく別の行に入れたいとします。ここに私がしたことがあります:

select 
    xmlColumn.value('(/StudentGroup/StudentIds)[1]','varchar(max)') as IDs 
from myTable 

このselect文はIDを1行に返します。このように:希望される何

30003001300289 

3000 
3001 
3002 
8 
9 

です助けてください!前もって感謝します。

答えて

1

あなたが変数にXML持っている:あなたがテーブルにXMLを持っている場合

DECLARE @x XML = ' 
<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup>'; 

SELECT 
    n.v.value('.','INT') AS ID 
FROM 
    @x.nodes('/StudentGroup/StudentIds/int') AS n(v); 

を:

DECLARE @x XML = ' 
<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup>'; 

DECLARE @t TABLE(
    x XML 
); 
INSERT INTO @t(x)VALUES(@x); 

SELECT 
    n.v.value('.','INT') AS ID 
FROM 
    @t 
    CROSS APPLY x.nodes('/StudentGroup/StudentIds/int') AS n(v); 
+0

は、私はテーブルのためにそれを書き直してみましょう...申し訳ありませんが速いですポスター); –

+0

ありがとう!!それはまさに私が探していたものです。 – nmess88

+0

@ nmess88ようこそ=) –

関連する問題