在查询分析器中运行以下语句:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc =
'
<root>
<qy>
<city>南海/city>
</qy>
</root>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT    *
FROM       OPENXML (@idoc, '/root/qy',2)
            WITH (city  varchar(10))-----------------出现下面错误错误:
服务器: 消息 6603,级别 16,状态 1,过程 sp_xml_preparedocument,行 13
XML 分析错误: 文本内容中发现无效字符。-----换成这样就正常DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc =
'
<root>
<qy>
<city>NH/city>
</qy>
</root>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT    *
FROM       OPENXML (@idoc, '/root/qy',2)
            WITH (city  varchar(10))
请高手指教,怎样才能读到中文字符

解决方案 »

  1.   

    1.
    DECLARE @idoc int
    DECLARE @doc nvarchar(1000)  ----------------------------这里
    SET @doc ='<root><qy><city>南海</city></qy></root>'
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    SELECT    *
    FROM       OPENXML (@idoc, '/root/qy',2)
                WITH (city  varchar(10))--南海city> 改成 南海</city>
    2.这个<city>NH/city> 改成 <city>NH</city>
      

  2.   

    DECLARE @idoc int
    DECLARE @doc varchar(1000)EXEC sp_xml_preparedocument @idoc OUTPUT, N'<root><qy><city>南海</city></qy></root>'
    SELECT    *
    FROM       OPENXML (@idoc, '/root/qy',2)
                WITH (city  varchar(10))
    这样就OK,因为有可能是乱吗,字符前要加N
      

  3.   

    DECLARE @idoc int
    DECLARE @doc nvarchar(1000)
    set @doc=N'<root><qy><city>南海</city></qy></root>'
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    SELECT    *
    FROM       OPENXML (@idoc, '/root/qy',2)
                WITH (city  varchar(10))
    这样是正确的,
    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    set @doc=N'<root><qy><city>南海</city></qy></root>'
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    SELECT    *
    FROM       OPENXML (@idoc, '/root/qy',2)
                WITH (city  varchar(10))
    这是错误的,因为有中文字符就要定义nvarchar类型