我有一个存储过程,可以在 SSMS 中使用执行命令正常运行,但是将相同的命令放入作业中会出现以下错误。
line 9, character 9, unexpected end of input
该代码采用 UTF-8 编码的非常长的 XML 字符串,并将其放入单个 nvarchar(max)
单元格中。然后将此字符串放入不同表中的 XML 单元格中,允许我使用节点函数查询 XML 代码的各个部分。由于编码差异,我无法将数据直接放入 nvarchar
单元格中。
我无法在此处重现该字符串,因为它非常长。
我只是在寻找关于哪里可能出错的想法。
这是我目前所知道的:
当手动
执行时,程序运行没有问题
我检查了权限问题,这似乎不是问题所在。代理在我自己的帐户下运行,我是数据库的系统管理员
我将程序拆分成单独的部分以准确定位问题发生的位置。单独的过程再次在手动执行时运行良好,但在通过 SQL Server 代理运行时发生错误。
当通过 SQL Server 代理单独运行查询时,它会给出一个略有不同的错误。这让我相信这是一个编码问题。但是,我正在从网页获取 XML,但无法更改网页上的编码。
line 1, character 38, unable to switch the encoding
我知道这是不可能的,因为您无法重现该问题,但如果有人可以提供关于从何处开始寻找答案的想法,我们将不胜感激。
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
最佳答案
指定
SET TEXTSIZE 200000
在 SQL 代理作业步骤中。 SQL 代理的默认 TEXTSIZE
是 512
。
关于sql - 存储过程在手动运行时工作,而不是从 sql server 代理运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019340/