<?xml version="1.0" encoding="UTF-8" ?> 
 <response>
  <status>0</status> 
  <desc>success</desc> 
 <content>
  <field name="测试名" type="string">测试内容值</field> 
  </content>
  </response>
请达人使用储存过程 解析出如上xml中field 字段的"测试内从值"
在网上找了一段代码,不支持xml中包含任何中文字符.附在网上找的代码
DECLARE @HDOC INT    --文档句柄
DECLARE @XMLSTRING VARCHAR(200)        --XML字符串
SET @xmlString ='<?xml version="1.0"?>
<ROOT>
    <USER ID="1" Name="SBQCEL"/>
    <USER ID="2" Name="PEACELI"/>
    <USER ID="3" Name="SHEEPCHANG"/>
</ROOT>'
--使用系统存储过程SP_XML_PREPAREDOCUMENT分析XML字符串
EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPUT, @xmlString
--使用OPENXML从SQL Server 的内部缓存查询数据
SELECT * FROM OPENXML(@HDOC,N'/ROOT/USER')
WITH 

    ID INT,
    Name VARCHAR(10)
)
--使用系统存储过程SP_XML_REMOVEDOCUMENT释放内存
EXEC SP_XML_REMOVEDOCUMENT @HDOC

解决方案 »

  1.   

    SQLServer2005 XML在T-SQL查询中的典型应用
    http://topic.csdn.net/u/20081107/17/68aaf5a9-c596-4ab5-ae18-f3370b2ab35b.html
      

  2.   

    这是在sql2005下的解析代码:给你的参考。
    关键是你xml代码的encoding部分,应该是GB2312,不应该是UTF-8.
    原因是你在ms studio中的编辑器默认编码 应该是GB2312,所以你的xml代码字符串的内部编码是GB2312,但在xml相关的存储过程 和 xml类型的方法中却是按照你的xml代码的头部encodeing提示UTF-8去处理,就出错了。
    我想,如果你的xml代码字符串是通过实际的utf-8编码的xml文档读入的话,应该不会出现问题!declare @xml xml
    set @xml='<?xml version="1.0" encoding="GB2312" ?> <response>  <status>0</status> <desc>success</desc> <content>  <field name="测试名" type="string">测试内容值</field> </content>  </response>'
    select @xml.value('(/response/content/field)[1]','nvarchar(50)')
      

  3.   

    declare @x as xml
    select @x='<?xml version="1.0" encoding="gbk"?> 
     <response>
    <status>0</status> 
    <desc>success</desc> 
    <content>
      <field name="test" type="string">测试内容值</field> 
    </content>
      </response>'
    select CAST(@x.query('./response/content/field/text()') AS VARCHAR(10))
    /*----------
    测试内容值(1 行受影响)
    */
      

  4.   

    GBK 或gb2312 
    别用utf-8
      

  5.   

    DECLARE @xml XML;
    SET @xml = '<?xml version="1.0" encoding="UTF-8" ?> 
    <response>  
      <status>0</status> 
      <desc>success</desc>
       <content>  
       <field name="测试名" type="string">测试内容值</field> 
       </content> 
    </response>'SELECT @xml.value('/response[1]/content[1]/field[1]','varchar(20)') AS field