declare @xml
set @xml='<root>
  <note ID="egu" Name="256">
    <item ID="b1" Name="部門1">
      <items ID="be2" Name="子部门" />
    </item>
    <item ID="b2" Name="開發部">
      <items ID="be3" Name="子部门3" />
      <items ID="be4" Name="子部门4" />
    </item>
     <item ID="b3" Name="開發部1">
      <items ID="be3" Name="子部门3" />
      <items ID="be4" Name="子部门4" />
    </item>
 <item ID="bf5" Name="開發部5">
      <items ID="be3" Name="子部门3" />
      <items ID="be4" Name="子部门4" />
    </item>
 <item ID="bgt4" Name="開發部6">
      <items ID="be3" Name="子部门3" />
      <items ID="be4" Name="子部门4" />
    </item>
  </note>
</root>'select @xml.query('//item[.[@ID="Begu02000"] or items[@ID="Begu02000"]]') //对单个的查询
是否可以查询多个如:查询item节点属性的ID为:b1,b3,bgt4
就像:select * from 表 where 字段 in(可以接多个条件)
寻求合理的解决方案,谢谢!!

解决方案 »

  1.   

    请参照 修改
    if   object_id('tempdb..#d')   is   not   null   
    begin
    drop table #d
    end
    create table #d (
    ItemCode nvarchar(16) not null,
    Time datetime not null,
    value decimal(18,6) null,
    State varchar(4) null
    primary key(ItemCode,Time))

    exec @ret = sp_xml_preparedocument @idoc OUTPUT, @strData
    if (@ret = 0)
    begin
    --将xml中的信息复制到表变量中
    insert into #d
    select o,t,convert(float,v),s
    from openxml(@idoc, '/r/d')
    with(o nvarchar(16) '@i',
     t varchar(19) '@t',
     v varchar(16) '@v',
     s varchar(4) '@s'
    )
    end
    else
    begin
    raiserror ('保存数据读取失败!', 11, -1)
    return -1
    end
    exec sp_xml_removedocument @idoc
    select * from #d
      

  2.   

    看看这里有没有相关内容。SQLServer2005 XML在T-SQL查询中的典型应用
    http://topic.csdn.net/u/20081107/17/68aaf5a9-c596-4ab5-ae18-f3370b2ab35b.html
      

  3.   

    o,t,v,s属于节点还是属性,还是节点的文本值?
      

  4.   

    只是针对同一个属性ID,的不同值查询,这样能够做得到吗?不过还想请教一个就是
    exec @ret = sp_xml_preparedocument @idoc OUTPUT, @strData
    @idoc是要输出的内容,@strData为xml,from openxml(@idoc, '/r/d')这句是不是有错啊,是否应换成from openxml(@strData, '/r/d')
      

  5.   

    declare @xml xml 
    set @xml='<root>
      <note ID="egu" Name="256">
      <item ID="b1" Name="部門1">
       <items ID="be2" Name="子部门" />
      </item>
      <item ID="b2" Name="開發部">
        <items ID="be3" Name="子部门3" />
        <items ID="be4" Name="子部门4" />
      </item>
      <item ID="b3" Name="開發部1">
        <items ID="be3" Name="子部门3" />
        <items ID="be4" Name="子部门4" />
      </item>
     <item ID="bf5" Name="開發部5">
        <items ID="be3" Name="子部门3" />
        <items ID="be4" Name="子部门4" />
      </item>
     <item ID="bgt4" Name="開發部6">
        <items ID="be3" Name="子部门3" />
        <items ID="be4" Name="子部门4" />
      </item>
      </note>
    </root>'
    select @xml.query('//item[@ID="b1"  or @ID="b3" or @ID="bgt4"]')
    --result
    /*<item ID="b1" Name="部門1"><items ID="be2" Name="子部门"/></item><item ID="b3" Name="開發部1"><items ID="be3" Name="子部门3"/><items ID="be4" Name="子部门4"/></item><item ID="bgt4" Name="開發部6"><items ID="be3" Name="子部门3"/><items ID="be4" Name="子部门4"/></item>*/
      

  6.   

    6楼的方法可以用,我狂晕,我曾经尝试过6楼的写法,居然说我有写错。。
    select @xml.query('//item[@ID="b1"  or @ID="b3" or @ID="bgt4"]')
    不知这句还能不能再简化...