派生列上的 SSIS 2012 VS_ISBROKEN
我已將 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"
所以很明顯,元數據需要更新。
同樣從錯誤螢幕截圖看來,表達式正在使用
SecurityDescriptionNoLineFeeds
notSecurityDescription
。這些錯誤可能是在包升級過程中引起的
旁注:檢查
SecurityDescription
未在不同組件中多次定義。(例如:Source.SecurityDescription
和Script.SecurityDescription
)嘗試刪除派生列轉換並重新創建它,或者添加一個新的派生列並刪除舊的