来自列的SQL XML查询

时间:2012-11-06 10:56:25

标签: sql sql-server xml

如何从SQL Server列中的这种XML中选择文件名?

    仅当高级别标记为名称为VALUE的对象时,
  1. 文件名才在属性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
    
  4. 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>'
    

2 个答案:

答案 0 :(得分: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 :(得分:0)

为此,您可以执行以下操作。

定义要显示的特定详细信息的字符串。

您希望显示ID和名称,以便您的字符串看起来像这样。

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

然后在整个字符串中搜索两个“#”符号之间的值。

当您找到它们时,只需搜索引号内的值,然后显示它们。