存储过程在手动运行时工作,而不是从sql server agent运行

Jen*_*lan 2 sql t-sql sql-server sql-server-2008

我有一个使用SSMS中的execute命令运行良好的存储过程,但是在作业中放入相同的命令会产生以下错误.

第9行,第9个字符,意外结束输入

该代码采用UTF-8编码的非常长的XML字符串并将其放入单个nvarchar(max)单元格中.然后将此字符串放入另一个表中的XML单元格中,允许我使用nodes函数查询XML代码的各个部分.nvarchar由于编码差异,我无法将数据直接放入单元格.

我不能在这里重现字符串,因为它非常长.

我只是在寻找可能出错的地方.

这是我目前所知道的:

  1. 手动执行时,该过程无故障运行

  2. 我检查了权限问题,这似乎不是问题.代理在我自己的帐户下运行,我是数据库的系统管理员

  3. 我将程序拆分为单独的部分,以准确定位问题发生的位置.手动执行时,单独的过程再次运行正常,但在通过SQL Server代理运行时会发生错误.

  4. 当通过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 
Run Code Online (Sandbox Code Playgroud)

小智 6

指定

SET TEXTSIZE 200000 
Run Code Online (Sandbox Code Playgroud)

在SQL代理作业步骤中.TEXTSIZESQL Agent 的默认值是512.