DECLARE   @idoc   int 
DECLARE   @doc   nvarchar(2000) 
SET   @doc   = '<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHotelDetail><HotelDetail><id>00101006</id>
<name>刘德华</name><country>China</country>
</HotelDetail></ArrayOfHotelDetail>' 
EXEC   sp_xml_preparedocument   @idoc   OUTPUT,   @doc SELECT * FROM   OPENXML   (@idoc,   '/ArrayOfHotelDetail/HotelDetail',   2) 
WITH   (id         char(15),   
            name     nvarchar(50),   
            country   nvarchar(50)  ) EXEC   sp_xml_removedocument   @idoc 
 
消息 6602,级别 16,状态 2,过程 sp_xml_preparedocument,第 1 行
错误说明是 '不支持从当前编码到指定编码的切换。'。
消息 8179,级别 16,状态 5,第 11 行
找不到句柄为 0 的预定义语句。
消息 6607,级别 16,状态 3,过程 sp_xml_removedocument,第 1 行
sp_xml_removedocument: 为参数 1 提供的值无效。

解决方案 »

  1.   


    '<?xml version="1.0" encoding="gb2312" ?>'
    --or
    <?xml version="1.0" encoding="UTF-16" ?><
      

  2.   

    DECLARE   @idoc   int 
    DECLARE   @doc   nvarchar(2000) 
    SET   @doc   = '<?xml version="1.0" encoding="utf-8"?>
    <ArrayOfHotelDetail><HotelDetail><id>00101006</id>
    <name>刘德华</name><country>China</country>
    </HotelDetail></ArrayOfHotelDetail>' 
    SELECT * FROM   OPENXML   (@idoc,   '/ArrayOfHotelDetail/HotelDetail',   2) 
    WITH   (id         char(15),   
                name     nvarchar(50),   
                country   nvarchar(50)  ) 
    EXEC   sp_xml_preparedocument   @idoc   OUTPUT,   @doc 
    EXEC   sp_xml_removedocument   @idoc 
     你这样试试
      

  3.   

    DECLARE   @idoc   int 
    DECLARE   @doc   nvarchar(2000) 
    SET   @doc   = '<?xml version="1.0" encoding="utf-8"?>
    <ArrayOfHotelDetail><HotelDetail><id>00101006</id>
    <name>刘德华</name><country>China</country>
    </HotelDetail></ArrayOfHotelDetail>' 
    SELECT * FROM   OPENXML   (@idoc,   '/ArrayOfHotelDetail/HotelDetail',   2) 
    WITH   (id         char(15),   
                name     nvarchar(50),   
                country   nvarchar(50)  ) 
    EXEC   sp_xml_preparedocument   @idoc   OUTPUT,   @doc 
    EXEC   sp_xml_removedocument   @idoc 
    你这样试试
      

  4.   

    传递  xml string到sql server时的sp_xml_preparedocument无法解析问题  "XML parsing error: Switch from current encoding to specified encoding not supported."  "系统不支持指定的编码方式。"这是因为SQL中的nvarchar中的字符是Unicode编码,varchar是ASCII编码造成的故定义传递给sp_xml_preparedocument的xml字符串时一定要注意输入的xml字符串的编码方式和定义的SQL变量的编码方式相同。
    DECLARE @doc varchar(max)   
    SET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ROOT><ROW Num="1" /></ROOT>' --正确   
    SET @doc = N'<?xml version="1.0" encoding="UTF-8" ?><ROOT><ROW Num="1" /></ROOT>' --正确   
    SET @doc = N'<?xml version="1.0" encoding="UTF-16" ?><ROOT><ROW Num="1" /></ROOT>' --错误   
    ...   
    DECLARE @doc nvarchar(max)   
    SET @doc = N'<?xml version="1.0" encoding="gb2312" ?><ROOT><ROW Num="1" /></ROOT>' --错误   
    SET @doc = N'<?xml version="1.0" encoding="UTF-8" ?><ROOT><ROW Num="1" /></ROOT>' --错误   
    SET @doc = N'<?xml version="1.0" encoding="UTF-16" ?><ROOT><ROW Num="1" /></ROOT>' --正确  
      

  5.   

    变量前加N
    SET   @doc   = N'<ArrayOfHotelDetail>
    <HotelDetail>
    <id>00101006</id>
    <name>刘德华</name>
    <country>China</country>
    </HotelDetail>
    </ArrayOfHotelDetail>' 
      

  6.   

    去掉<?xml version="1.0" encoding="utf-8"?>
    SET @doc = N'<ArrayOfHotelDetail>
    <HotelDetail>
    <id>00101006</id>
    <name>刘德华</name>
    <country>China</country>
    </HotelDetail>
    </ArrayOfHotelDetail>' 
      

  7.   


    谢谢,用你的办法可以了
    DECLARE   @idoc   int 
    DECLARE   @doc   varchar(max) 
    SET   @doc   = N'<?xml version="1.0" encoding="gb2312" ?><ArrayOfHotelDetail><HotelDetail><id>00101006</id><name>刘德华</name><country>China</country></HotelDetail></ArrayOfHotelDetail>' 
    EXEC   sp_xml_preparedocument   @idoc   OUTPUT,   @doc SELECT * FROM   OPENXML   (@idoc,   '/ArrayOfHotelDetail/HotelDetail',  2) 
    WITH   (id         char(15),   
                name     nvarchar(50),   
                country   nvarchar(50)  ) EXEC   sp_xml_removedocument   @idoc ---------------------
    00101006        刘德华 China已经可以了,现在问题是,节点含有别的东西的时候,查询是nullSET   @doc   = N'<?xml version="1.0" encoding="gb2312" ?><ArrayOfHotelDetail><HotelDetail><id xmlns="http://api.elong.com/staticInfo/">00101006</id><name>刘德华</name><country>China</country></HotelDetail></ArrayOfHotelDetail>' ID的节点含有xmlns的时候,查询出来就是
    -------------------------NULL 刘德华 China
    这该怎么处理?我要怎么处理才能获取到00101006
    谢谢