use*_*502 5 xml sql-server 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)
Run Code Online (Sandbox Code Playgroud)
--下面的语句会在我删除此语句时产生问题,它在任何地方都可以正常工作
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)
Run Code Online (Sandbox Code Playgroud)
小智 7
你知道 Sql Agent TEXTSIZE 吗?
在程序中直接指定 TEXTSIZE 512 和 exec,在这种情况下你会得到同样的错误
设置文本大小 -1
或其他值,默认情况下,我使用 -1 表示无限大小 SQL 代理上的 sql server textsize 为 512
您的代码如何通过 URL 获取平面文件工作正常......
在这之后
INSERT @xmlT ( yourXML )
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'
Run Code Online (Sandbox Code Playgroud)
...您声明的表变量包含一行具有有效的 XML。
@xmlTstore aVARCHAR(MAX)并执行 pure SELECT. 该文件是预先格式化的“漂亮”xml...所以:报告的行数和字符数应该没问题...我最喜欢的是 1):由于反映的错误谈到“XML 解析 - 输入意外结束”,我想您读取的 XML 会在某处被剪切...
查出
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |