我有一个使用 SSMS 中的执行命令运行良好的存储过程,但是将相同的命令放在作业中会产生以下错误。
第 9 行,字符 9,输入意外结束
该代码采用 UTF-8 编码的很长的 XML 字符串并将其放入单个nvarchar(max)
单元格中。然后将此字符串放入不同表中的 XML 单元格中,允许我使用节点函数查询 XML 代码的各个部分。nvarchar
由于编码差异,我无法将数据直接放入单元格中。
我无法在这里复制字符串,因为它非常长。
我只是在寻找关于哪里可能出错的想法。
到目前为止,这是我所知道的:
该过程在手动执行时运行没有问题
我检查了权限问题,这似乎不是问题。代理在我自己的帐户下运行,我是数据库的系统管理员
我将程序拆分为单独的部分,以准确定位问题发生的位置。手动执行时,单独的过程再次运行良好,但通过 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&User=primplims@gmail.com&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