2016-08-03 46 views
1

主題:響應數據截斷通過工作運行SP時

我已經得到了我創建每月報告。報告的創建包含兩個步驟:

  1. 從我們的服務中獲取XML並將其存儲在數據庫中;
  2. 解析XML並創建文件。

對於我創建在手動模式下報表的最後幾個月。現在我想自動化這些東西。 但這裏談到一個

問題:

第二步(解析XML和文件創建)運行就像一個魅力,但第一步我觀察怪異的行爲。

我得到了存儲過程,而獲得XML:

ALTER PROCEDURE [Structure].[GetXML] 
    @LastActDate date, 
    @CurActDate date 
AS 
BEGIN 
    SET NOCOUNT ON; 

    begining: 

    DECLARE @URI varchar(2000), 
      @methodName varchar(50), 
      @objectID int, 
      @hResult int, 
      @setTimeouts nvarchar(255), 
      @serv nvarchar(255) = 'http://example.com/docs/', 
      @result nvarchar(max) = '' 

    DECLARE @t TABLE(Resp nvarchar(max)) 

    declare @timeStamp nvarchar(50) = convert(nvarchar(50),CURRENT_TIMESTAMP,127) 

    declare @CurDate date = dateadd(day,0,getdate()) 

    --EXEC @hResult = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @objectID OUT 
    EXEC @hResult = sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT 

    SELECT @URI = @serv + '.newchange?ds='+CONVERT(nvarchar(10),@LastActDate,104)+'&df='+CONVERT(nvarchar(10),@CurActDate,104)+'&pardaily=1', 
      @methodName='GET', 
      @setTimeouts = 'setTimeouts(9000,90000,900000,9000000)' 

    EXEC @hResult = sp_OAMethod @objectID, 'open', null, @methodName, @URI, 'false' 
    EXEC @hResult = sp_OAMethod @objectID, @setTimeouts 
    EXEC @hResult = sp_OAMethod @objectID, 'send', null 

    INSERT INTO @t 
    EXEC sp_OAGetProperty @objectID, 'responseText' 

    SELECT top 1 @result = Resp 
    FROM @t 

    if @result is null 
    begin 
     delete from @t 
     exec sp_OAGetErrorInfo @objectID 
     exec sp_OADestroy @objectID 
     goto begining 
    end 
    else 
    begin 
     INSERT INTO Structure.MonthlyRow 
     SELECT @timeStamp, @result 
    end 
END 

當我運行該SP像

EXEC [Structure].[GetXML] '2016-06-01', '2016-07-01' 

我有一排Structure.MonthlyRow表正確timestampresponse(平均長度〜 70k符號)

這是表的創建腳本:

CREATE TABLE Structure.MonthlyRow(
    [timestamp] nvarchar(50) NOT NULL, 
    [RowResp] nvarchar(max) NULL, 
CONSTRAINT [PK_dDayly] PRIMARY KEY CLUSTERED ([timestamp] DESC)) 

如果我創建一個啓動此SP的作業,我在表格中得到一行結果,並且結果的長度爲512個符號!這是XML,看起來就像是從截斷向nvarchar(max)nvarchar(512)一個適當的一部分,但我沒有變量或表列有512個長度所使用。

有什麼我想:

  1. 作爲用戶運行與我的作業步驟屬性帳戶;
  2. 按計劃或手動啓動作業;
  3. 在SP添加WITH EXECUTE AS OWNER;
  4. 使用WinHttp.WinHttpRequest.5.1MSXML2.XMLHTTP嘗試。

問:

什麼可能會是一個問題?爲什麼我在手動運行SP時得到了正確的結果,並且在運行SP作爲工作步驟時只有512個響應符號?

注:

是的,我知道,正從網絡服務XML是更好地PHP,C#,甚至PowerShell的處理,如果我不能找到一個解決方案,我將用其中的一個。在您的SP的頂部或在工作中你的SP的EXEC

+0

也許你可以試着用Network Monitor或Wiresha這樣的工具來檢查網絡上發生的事情RK?看看請求是否相同 –

回答

2

加入這一行

SET TEXTSIZE 2147483647; 

的問題是就業設置了默認

SET TEXTSIZE 1024 

此限制的數據返回到1024字符(512爲n字符)

相關問題