web-dev-qa-db-ja.com

派生列のSSIS 2012 VS_ISBROKEN

VS2008でビルドされたSSISパッケージをVS2010で開くように変換しました。

検証に失敗した派生列コンポーネントがあります。 VS2008では問題なく動作します。派生列で使用される式は次のとおりです...

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

以下は、パッケージを実行したときのエラーです...

enter image description here

エラーは:

[派生列[36]]エラー:
式を解析する試み
"[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102"が失敗し、エラーコード0xC00470A3が返されました。
式を解析できません。無効な要素が含まれているか、形式が正しくない可能性があります。また、メモリ不足エラーが発生している可能性もあります。

私は再確認しましたが、SecurityDescriptionは有効な列です。 SecurityDescriptionを追加するだけで問題ありません。 FINDSTRINGコードの何が問題なのかわからない。

6
K09

まず、_:_文字の前に追加の括弧があります。式は次のとおりです。

_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_)

派生列変換を削除して再作成するか、新しい派生列を追加して古い列を削除してください

5
Hadi

列はトークン化されているため、参照が壊れている可能性があります。

多くの同様のエラーは、新しいVSバージョンで再構築することで簡単に修正されます。しかし、場合によっては、式を編集して再度解析する必要があります。次にビルドします。

https://docs.Microsoft.com/en-us/sql/integration-services/data-flow/transformations/derived-column-transformation-editor

通常、パッケージをソース管理に追加します。これにより、XMLを比較し、以前のバージョンの式をコピーして貼り付けることができます

0
Bruno Guardia

エラーは、SecurityDescriptionが参照する有効な列ではなくなったことを示しています。おそらくVS2008はそのようなエラーを無視するか、アップグレードで列が失われました。

0
T.H.