簡體   English   中英

存儲過程在手動運行時工作,而不是從sql server agent運行

[英]Stored procedure working when run manually, not running from sql server agent

我有一個使用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 

指定

SET TEXTSIZE 200000 

在SQL代理作業步驟中。 SQL Agent的默認TEXTSIZE512

只是一個更新。 無法正常工作的原因是從站點獲取的XML被截斷了。 我從來沒有完全弄清楚為什么會發生這種情況,但是我使用了wget for windows而不是WinHttp.WinHttpRequest.5.1,它從網站上獲取了所有數據並將其直接傳遞到我可以解析數據的網頁。

只需輸入SET TEXTSIZE (with a great value)

其余的工作由SQL Agent完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM