sql作业中的Xml解析问题

时间:2016-01-28 06:20:42

标签: sql-server xml sql-server-2008-r2 xml-parsing

我在SQL Server作业中执行查询时遇到错误。但如果我直接执行它,它就可以正常工作。

以用户身份执行:NT AUTHORITY \ SYSTEM。

  

XML解析:第10行,第33个字符   意外的输入结束[SQLSTATE 42000](错误9400)。步骤失败。
  SQL严重级16,SQL消息ID 9400

代码:

    declare  @URL VARCHAR(max) 

    set @url = 'http://www.spa.gov.sa/english/rss.xml'

    declare  @xmlT TABLE (yourXML XML)
    DECLARE @Response nvarchar(max)
    DECLARE @XML xml
    DECLARE @Obj int 
    DECLARE @Result int 
    DECLARE @HTTPStatus int 
    DECLARE @ErrorMsg nvarchar(MAX)

    EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT 

    EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
    EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
    EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
    EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT 

    INSERT @xmlT ( yourXML )
    EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--, @Response OUT 


    INSERT into Tlb(discp, tit, datee, linkk)

- 当我删除此语句时,以下语句会产生问题,无处不在

        SELECT   
            N.C.value('description[1]', 'nvarchar(max)') discp,   
            N.C.value('title[1]', 'varchar(999)') tit,
            N.C.value('pubDate[1]', 'varchar(99)') datee,
            N.C.value('link[1]', 'varchar(999)') linkk
        FROM
            @xmlT 
        CROSS APPLY 
            yourXML.nodes('//channel/item') N(C)

2 个答案:

答案 0 :(得分:3)

你知道Sql Agent TEXTSIZE吗?

直接在程序TEXTSIZE 512和exec中指定,在这种情况下你会得到同样的错误

  

SET TEXTSIZE -1

或者其他值,我默认使用-1作为无限大小的sql SQL Agent上的服务器文本大小为512

答案 1 :(得分:2)

您的代码如何通过URL获取平面文件正常...

在此之后

INSERT @xmlT ( yourXML )
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'

...您声明的表变量包含一行,其中包含有效的XML。

"第10行第33个字符"可能指向

  1. 由于一个小的varchar变量而被完全切断
    • 在我的测试中,第10行甚至没有这么多字符......
    • 可能是,该文件的内容有所不同,但前10行似乎带有相当稳定的数据......
    • 尝试更改@xmlT以存储VARCHAR(MAX)并执行纯SELECT。该文件是预先格式化的,"漂亮" xml ...所以:报告的行号和字符数应该没问题......
  2. 无效的XML(例如缺少结束标记)
    • 如果XML从源代码中无效,那么您调用它的方式就不会有所区别......
  3. 无效字符
    • 可能是编码
    • 存在问题
  4. 我最喜欢的是1):由于反映的错误说明" XML解析 - 意外的输入结束"我想,你读到的XML会被删除...

    找出

    • 如果您在XML的内容中出现相同的错误。
    • 如果你得到它总是总是使用相同的行号和字符数