我有一个存储过程,可以在 SSMS 中使用执行命令正常运行,但是将相同的命令放入作业中会出现以下错误。
第 9 行,第 9 个字符,输入意外结束
该代码采用 UTF-8 编码获取非常长的 XML 字符串,并将其放入单个nvarchar(max)
细胞。然后将此字符串放入不同表中的 XML 单元格中,使我能够使用节点函数查询 XML 代码的各个部分。我无法将数据直接放入nvarchar
细胞由于编码差异。
我无法在这里重现该字符串,因为它非常非常长。
我只是在寻找真正可能出问题的想法。
到目前为止我所知道的是:
该程序执行时运行没有问题manually
我检查了权限问题,这似乎不是问题。代理在我自己的帐户下运行,我是数据库的系统管理员
我将过程分成单独的部分,以准确定位问题发生的位置。再次,单独的过程在手动执行时运行良好,但在通过 SQL Server 代理运行时会发生错误。
当通过 SQL Server 代理单独运行查询时,它会给出略有不同的错误。这让我相信这是一个编码问题。但是,我从网页获取 XML,但无法更改网页上的编码。
第1行,第38个字符,无法切换编码
我知道这是一个很遥远的事情,因为你无法复制这个问题,但如果有人能给出从哪里开始寻找答案的想法,我将不胜感激。
编辑1:非常感谢您的帮助。我不得不花一点时间远离这个问题来理清思绪。这周回来再说吧。
好吧,我想我终于找到了问题的根源。这是我用来从网站获取数据的代码。它正在截断从网站提取的数据。在 SSMS 中执行时运行完美。它在通过批处理文件运行时将数据截断为 2048 个字符,在使用 SS 作业运行时将数据截断为 512 个字符。
这些值不能是随机的。一定有某个地方的设置,但我找不到它。有任何想法吗?
这是代码:
DECLARE
@url nvarchar(max),
@win integer,
@hr integer ,
@Date date,
@SearchDate nvarchar(50)
Delete from XMLParsing.dbo.TextData
Set @Date = GETDATE()
set @SearchDate = CAST(@Date as nvarchar(50))
set @SearchDate = REPLACE(@SearchDate,'-','')
Select @url = 'http://semorep.sem-o.com/DataCollection/DataSets.asmx/queryDatasetXML?DatasetName=SET_CAL&[email protected] /cdn-cgi/l/email-protection&Password=testsemo&FromDate=20130103&ToDate=20130111&P1=Energy&P2=Statements&P3=Initial&P4=&P5='
EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
INSERT XMLParsing.dbo.TextData(SEMO_Data)
EXEC @hr=sp_OAGetProperty @win,'ResponseText'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win