2012-11-06 92 views
1

如何從SQL Server列中的這種XML中選擇文件名?列中的SQL XML查詢

  1. 文件名是在屬性VALUE只有當高電平標記是與名稱對象File 這樣

    <Object NAME="File"> 
        <Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" /> 
    </Object> 
    
  2. 此子層級可以被放置在XML的任何水平(參見下文實施例)

  3. XML列可以包含0-N的文件名,我需要的清單是這樣的:

    id, filename 
    --- ------------------------ 
    1 \\mysvr\fiels\readme1.txt 
    1 \\mysvr\fiels\readme2.txt 
    2 \\mysvr\fiels\readme3.txt 
    2 \\mysvr\fiels\readme4.txt 
    

的XML內容,例如:

declare @t1 table 
( id int, 
    x XML 
) 

insert into @t1 (id, x) 
select 1,N'<root name="name" id="12"> 
<class1> 
    <Object NAME="File"> 
       <Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" /> 
    </Object> 
</class1> 
<class1> 
<subclass1> 
<Object NAME="File"> 
       <Parameter ID="10" NAME="Name" VALUE="\\mysvr\fiels\readme2.txt" /> 
</Object> 
<Object NAME="bitmap"> 
       <Parameter ID="11" NAME="my1" VALUE="bmp" /> 
</Object> 
</subclass1> 
</class1> 
</root>' 
union 
select 2,N'<root name="name" id="12"> 
<class1> 
    <Object NAME="File"> 
       <Parameter ID="13" NAME="Name" VALUE="\\mysvr\fiels\readme3.txt" /> 
    </Object> 
    <Object NAME="Font"> 
       <Parameter ID="22" NAME="Tahoma" VALUE="11" /> 
    </Object> 
</class1> 
<class1> 
<subclass1> 
    <Object NAME="File"> 
       <Parameter ID="14" NAME="Name" VALUE="\\mysvr\fiels\readme4.txt" /> 
    </Object> 
</subclass1> 
</class1> 
</root>' 

回答

1

試試這個:

SELECT 
    id, 
    Filename = ObjPrm.value('@VALUE', 'varchar(100)') 
FROM @t1 
CROSS APPLY x.nodes('//Object[@NAME="File"]/Parameter') AS Tbl(ObjPrm) 

給我的輸出:

enter image description here

+1

太棒了!這正是我需要的。非常感謝你! – Oleg

0

要做到這一點,你可以做到以下幾點。

定義您想要顯示的特定細節的字符串。

你想顯示id和Name,所以你的字符串看起來像這樣。

String holder = "#id# -- #VALUE#" 

然後,通過整個字符串搜索兩個'#'符號之間的值。

當您找到它們時,只需搜索引號內的值並顯示它們即可。

+0

我需要T-SQL查詢。這些xml字段在表格中,我需要從@ t1中選擇...並接收記錄集:id和文件名(請參閱示例) – Oleg