VS2008でビルドされたSSISパッケージをVS2010で開くように変換しました。
検証に失敗した派生列コンポーネントがあります。 VS2008では問題なく動作します。派生列で使用される式は次のとおりです...
_FINDSTRING(
SecurityDescription,"\n",1) > 0
? SUBSTRING(SecurityDescription, 1,
FINDSTRING(SecurityDescription,"\n",1) - 1)
) : SecurityDescription
_
以下は、パッケージを実行したときのエラーです...
エラーは:
[派生列[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
が同じ表現で異なる系統IDを持っていることがわかりますが、これは正しくありません。
"[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102"
したがって、メタデータを更新する必要があることは明らかです。
また、エラーのスクリーンショットから、式がSecurityDescriptionNoLineFeeds
ではなくSecurityDescription
を使用しているように見えます。
これらのエラーは、パッケージのアップグレードプロセス中に発生する可能性があります
サイド注:SecurityDescription
が異なるコンポーネントで複数回定義されていないことを確認してください。 (例:_Source.SecurityDescription
_および_Script.SecurityDescription
_)
派生列変換を削除して再作成するか、新しい派生列を追加して古い列を削除してください
列はトークン化されているため、参照が壊れている可能性があります。
多くの同様のエラーは、新しいVSバージョンで再構築することで簡単に修正されます。しかし、場合によっては、式を編集して再度解析する必要があります。次にビルドします。
通常、パッケージをソース管理に追加します。これにより、XMLを比較し、以前のバージョンの式をコピーして貼り付けることができます
エラーは、SecurityDescriptionが参照する有効な列ではなくなったことを示しています。おそらくVS2008はそのようなエラーを無視するか、アップグレードで列が失われました。