2013-04-15 76 views
2

沒有運行我有一個運行正常使用SSMS執行命令,但是把同樣的命令作業中的存儲過程提供了以下錯誤的工作。存儲過程手動運行時,從SQL Server代理

9行,字符9,輸入

代碼需要很長的XML字符串以UTF-8編碼並將其放入單個nvarchar(max)細胞的意外結束。然後將此字符串放入另一個表中的XML單元格中,從而允許使用節點函數查詢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&[email protected]&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 
+3

你能告訴我們第9行9個字符是什麼嗎? –

+0

正如我們可以看到你說你有權限但連接字符串連接不同的用戶?如果是的話,它有權限。 – Necro

+2

您是否將該命令放入作業中,或者在作業中存儲過程調用? –

回答

1

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

5

在SQL代理作業步驟指定

SET TEXTSIZE 200000 

。 SQL代理的默認TEXTSIZE512

0

只要把 SET TEXTSIZE (with a great value)

和SQL Agent做休息。

相關問題