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

标签 sql sql-server sql-server-2008 tsql

我有一个存储过程,可以在 SSMS 中使用执行命令正常运行,但是将相同的命令放入作业中会出现以下错误。

line 9, character 9, unexpected end of input

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

我无法在此处重现该字符串,因为它非常长。

我只是在寻找关于哪里可能出错的想法。

这是我目前所知道的:

  1. 手动

  2. 执行时,程序运行没有问题
  3. 我检查了权限问题,这似乎不是问题所在。代理在我自己的帐户下运行,我是数据库的系统管理员

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

  5. 当通过 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 代理的默认 TEXTSIZE512

关于sql - 存储过程在手动运行时工作,而不是从 sql server 代理运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019340/

相关文章:

c# - 猜猜插入语句中的错误

mysql - 如何允许用户 sql 访问仅限于某些行的表?

mysql - 当不需要 int 时,创建 SQL 函数时出错(无法转换为 int)

sql - SQL Server 是否支持 IS DISTINCT FROM 子句?

sql-server-2008 - 如何找到 SSRS 报告背后的存储过程/脚本?

TSQL CTE 错误 : Incorrect syntax near ')'

sql - 使用sql server添加特定日期、年、月、周

java - UCanAccess异常: cannot getMetaData from ResultSet (invalid cursor state)

SQL Server 替换

php - 我这里的错误是什么,显示 SQL 语法错误?