Sql-Server

為什麼在 sql server 代理上執行 SSIS 包時出現截斷錯誤,但手動執行時卻沒有

  • August 19, 2019

我創建了一個 SSIS 包,該包刪除然後創建一個表,以將數據從 Sql Server 2008 r2 傳輸到訪問文件。當我在 BIDS 2008r2 中執行它時,它執行得很好,完全沒有截斷問題。當我獲取該包並在 SQL Server 代理上執行它時,它無法說它在日期欄位上有截斷錯誤。當我手動查看數據(只有 159 條記錄)時,我看不到任何時髦的數據。

我的帳戶和服務帳戶都是伺服器管理員,因此伺服器端的訪問權限沒有區別,而且我們都在目標文件共享的本地管理員組中。我還執行了 4 個以相同方式建構的其他軟體包,但這是唯一一個僅在代理上出現數據截斷錯誤的軟體包,而不是在投標中手動執行。

以下是錯誤的全文減去使用者帳戶資訊。

 Executed as user:<Domain>\<sql service account>. Microsoft (R) SQL Server Execute Package Utility  Version 10.50.6560.0 for 64-bit  Copyright (C) Microsoft Corporation 2010. All rights reserved.
   Started:  7:13:49 AM
 Error: 2019-08-12 07:13:50.78
    Code: 0xC0202009
    Source: Data Flow Task 1 chips dest [705]
    Description: SSIS Error Code DTS_E_OLEDBERROR.
      An OLE DB error has occurred. Error code: 0x00040EDA.
 End Error  
 Error: 2019-08-12 07:13:50.78
    Code: 0xC020901C
    Source: Data Flow Task 1 chips dest [705]
    Description: There was an error with input column "DATE" (959) on input "Destination Input" (718). The column status returned was: "The value could not be converted because of a potential loss of data.".
 End Error
 Error: 2019-08-12 07:13:50.78
    Code: 0xC0209029
    Source: Data Flow Task 1 chips dest [705]
    Description: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.
      The "input "Destination Input" (718)" failed because error code 0xC0209077 occurred, and the error row disposition on "input "Destination Input" (718)" specifies failure on error. An error occurred on the specified object of the specified component.
      There may be error messages posted before this with more information about the failure.
 End Error
 Error: 2019-08-12 07:13:50.78
    Code: 0xC0047022
    Source: Data Flow Task 1 SSIS.Pipeline
    Description: SSIS Error Code DTS_E_PROCESSINPUTFAILED.
      The ProcessInput method on component "chips dest" (705) failed with error code 0xC0209029 while processing input "Destination Input" (718). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.
      There may be error messages posted before this with more information about the failure.
 End Error
 DTExec: The package execution returned DTSER_FAILURE (1).
 Started:  7:13:49 AM
 Finished: 7:13:53 AM
 Elapsed:  4.197 seconds.
 The package execution failed.
 The step failed.

這是令人討厭的不一致之一,因為 SQL 代理可能在與您自己執行時不同的設置下執行(例如,ARITHABORT當您打開它時它可能會關閉,等等)。

我發現使用對不同設置不敏感的解決方案更穩健,而不是擺弄設置,這意味著避免任何可能的精度損失。因為您的目標是 Access 數據庫,所以日期/時間的精度為一秒。如果您使用的是舊datetime數據類型,它具有 1/3 毫秒的奇怪精度,這可能會導致 SSIS 喜歡告訴所有人和他們的狗的精度損失。

要解決此問題,請使用datetime2(0)具有相同精度(一秒)的精度來精確匹配精度,這樣就可以避免錯誤,無論您/代理在什麼設置下執行。

引用自:https://dba.stackexchange.com/questions/245158