我在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)
答案 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。
@xmlT
以存储VARCHAR(MAX)
并执行纯SELECT
。该文件是预先格式化的,"漂亮" xml ...所以:报告的行号和字符数应该没问题...... 我最喜欢的是1):由于反映的错误说明" XML解析 - 意外的输入结束"我想,你读到的XML会被删除...
找出