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

存储过程在手动运行时工作,而不是从sql server代理运行,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个在SSMS中使用execute命令运行良好的存储过程,但是在作业中使用相同的命令会产生以下错误 第9行,字符9,输入意外结束 代码采用UTF-8编码的很长XML字符串,并将其放入单个nvarchar(max)单元格中。然后将该字符串放入另一个表中的XML单元格中,允许我使用nodes函数查询XML代码的各个部分。由于编码差异,我无法将数据直接放入nvarchar单元格 我无法在这里复制字符串,因为它非常长。 我只是在寻找一些想法,看看哪里会出问题 以下是我目前所知道的: 当手动执行时,该

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

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

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

我无法在这里复制字符串,因为它非常长。

我只是在寻找一些想法,看看哪里会出问题

以下是我目前所知道的:

  • 当手动执行时,该过程运行时没有问题

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

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

  • 当通过SQLServer代理单独运行查询时,会出现一个稍微不同的错误。这让我相信这是一个编码问题。但是,我从一个网页获取XML,我不能更改网页上的编码

  • 第1行,字符38,无法切换编码

    我知道这是一个很长的机会,因为你不能复制这个问题,但如果有人能给出一个从哪里开始寻找答案的想法,我们将不胜感激

    Edit1:非常感谢你的帮助。我不得不从这个问题上花点时间来理清思路。本周再来看

    好的,我想我终于找到了问题的根源。这是我用来从网站获取数据的代码。它正在截断从网站中提取的数据。它在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 
    
    声明
    @url nvarchar(最大值),
    @赢整数,
    @hr整数,
    @日期,
    @搜索日期nvarchar(50)
    从XMLParsing.dbo.TextData中删除
    Set@Date=GETDATE()
    设置@SearchDate=CAST(@Date为nvarchar(50))
    设置@SearchDate=REPLACE(@SearchDate'-','')
    选择@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
    如果@hr 0 EXEC sp_OAGetErrorInfo@win
    EXEC@hr=sp_OAMethod@win,'Open',NULL,'GET',@url,'false'
    如果@hr 0 EXEC sp_OAGetErrorInfo@win
    EXEC@hr=sp_OAMethod@win,'Send'
    如果@hr 0 EXEC sp_OAGetErrorInfo@win
    插入XMLParsing.dbo.TextData(SEMO_数据)
    EXEC@hr=sp_OAGetProperty@win,'ResponseText'
    如果@hr 0 EXEC sp_OAGetErrorInfo@win
    执行官@hr=sp_OADestroy@win
    如果@hr 0 EXEC sp_OAGetErrorInfo@win
    
    只是一个更新。这无法正常工作的原因是从站点获取的XML被截断。我从来没有完全弄明白为什么会发生这种情况,但我使用了windows版的wget,而不是WinHttp.WinHttpRequest.5.1,它从站点获取所有数据,并将其直接传递到我可以解析数据的网页。

    SET TEXTSIZE 200000 
    
    在SQL代理作业步骤中。SQL代理的默认
    TEXTSIZE
    512

    刚刚放置
    设置TEXTSIZE(具有较大的值)


    剩下的由SQL代理完成。

    您能告诉我们第9行第9个字符是什么吗?我们可以看到您说您有权限,但连接字符串是否与其他用户连接?如果是,它是否有权限。您是将命令放入作业中,还是将存储过程调用放入作业中?XML字符串有多长?@PaulSasik我相信这是在
    第9行character 9 Set@Date=GETDATE()