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