Sql-Server

派生列上的 SSIS 2012 VS_ISBROKEN

  • May 6, 2017

我已將 VS2008 中內置的 SSIS 包轉換為在 VS2010 中打開。

我有一個未通過驗證的派生列組件。它在 VS2008 中執行良好。這是派生列中使用的表達式…

FINDSTRING(
   SecurityDescription,"\n",1) > 0   
   ? SUBSTRING(SecurityDescription, 1, 
               FINDSTRING(SecurityDescription,"\n",1) - 1)  
) : SecurityDescription

以下是我執行包時的錯誤…

在此處輸入圖像描述

錯誤是:

$$ Derived Column [36 $$] 錯誤:

嘗試解析表達式

[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102”失敗並返回錯誤程式碼 0xC00470A3。

無法解析表達式。它可能包含無效元素或格式不正確。也可能存在記憶體不足錯誤。

我已經仔細檢查並且SecurityDescription是一個有效的列。如果我只添加SecurityDescription. 不確定FINDSTRING程式碼有什麼問題。

首先,你在:字元前多了一個括號,表達式為:

FINDSTRING(
SecurityDescription,"\n",1) > 0   
? SUBSTRING(SecurityDescription, 1, 
           FINDSTRING(SecurityDescription,"\n",1) - 1)  
: SecurityDescription

沿襲 ID 錯誤

“沿襲 ID 是數據流任務中使用的組件或轉換的屬性。它包含一個整數值,將用作緩衝區指針。數據流任務中的每一列都將分配一個沿襲 ID。” 在此 Microsoft TechNet 文章中了解沿襲 ID

LINEAGE ID 錯誤意味著源元數據已更改,只需通過點兩下派生列轉換並關閉它來重新驗證源(連接和組件),然後檢查列元數據(使用高級編輯器)。(請注意,當點兩下包含錯誤的組件時,它會提示修復它)

或者您可以嘗試刪除派生列轉換並再次添加(如果以前的解決方案不起作用)

重新驗證源列元數據也很好

分析異常

如果你看一下拋出的異常,你會發現SecurityDescription在同一個表達式中有不同的 lineage id,這是不正確的。

"[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102"

所以很明顯,元數據需要更新。

同樣從錯誤螢幕截圖看來,表達式正在使用SecurityDescriptionNoLineFeedsnot SecurityDescription

這些錯誤可能是在包升級過程中引起的

旁注:檢查SecurityDescription未在不同組件中多次定義。(例如:Source.SecurityDescriptionScript.SecurityDescription

嘗試刪除派生列轉換並重新創建它,或者添加一個新的派生列並刪除舊的

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