declare @mydoc xml
set @mydoc='
<值表>
  <总值记录 id="123456">
    <值记录>
       <字段名称>文本框</字段名称>
       <字段内容>测试1</字段内容>
    </值记录>
  </总值记录>
  <总值记录 id="654321">
    <值记录>
       <字段名称>下拉框</字段名称>
       <字段内容>测试2</字段内容>
    </值记录>
  </总值记录>
'查找其中一条记录,可以这样写select @mydoc.query('值表/总值记录[1]')
或者
select @mydoc.query('值表/总值记录[@id="123456"]')我想把[id="123456"]中的123456做成变量,或者把总值记录[1]中的1做成变量,就是declare @doc nvarchar(10)
set @doc="123456"
select @mydoc.query('值表/总值记录[@id=@doc]')declare @doc integer
set @doc=1
select @mydoc.query('值表/总值记录[@doc]')上面两个写法都会出错,请问应该怎么把变量写在里面呢?

解决方案 »

  1.   

    上面我写漏了</值表>了请教如何把变量写在xml的查询语句里面
      

  2.   

    declare   @doc   nvarchar(10) 
    set   @doc= "123456 " 
    select   @mydoc.query( '值表/总值记录[@id=sql:variable("@doc")] ') 
      

  3.   

    declare @doc nvarchar(10) 
    set   @doc= "123456 " 
    select   @mydoc.query( '值表/总值记录[@id=sql:variable("@doc")]')--这个貌似不能用变量
    declare   @doc   integer 
    set   @doc=1 
    select   @mydoc.query( '值表/总值记录[@doc] ')
      

  4.   


    declare   @doc   nvarchar(10) 
    set   @doc= '123456' 
    select   @mydoc.query( '值表/总值记录[@id=sql:variable("@doc")] ') 
      

  5.   

    对于把sql变量当做值来处理, 可以用sql:variable传入sql变量。 就像4楼写的那样。但是值,也就仅是值可以这么做, 而用来表示定位的东西,如节点集下标,路径,节点名,等等不可以这么用, 即,sql:variable传入的是值,而不能代表xml对象。
    这其实跟--错
    declare @tablename varchar(10)
    set @tablename='myTable'
    select * from @tablename --对
    declare @myvalue varchar(10)
    set @myvalue = 'aa'
    select * from mytable where value=@myvalue
    一样的道理。字串值,仅仅只是值,不能当对象来处理。@x.query('//item[sql:variable("@x")]') 这种想法是不能成立的。