SSIS OLEDB宛先-説明のないエラー出力リダイレクトエラー

Nov 26 2020

私は何か奇妙なことを経験しています。テーブルからデータをフェッチするOLEDBソースを含むSSISパッケージ内にデータフロータスクがあります-次に、行キーが宛先テーブル(宛先テーブルの主キー)にすでに存在するかどうかをチェックするルックアップトランスフォーメーションがあり、ルックアップ番号match出力はOLEDB宛先に接続されています。また、OLE DB宛先のエラー出力をスクリプトコンポーネントに接続しました。スクリプトコンポーネントは、問題が発生した場合にエラーメッセージとエラー列を取得し、それらのデータを例外テーブルに挿入します。

私が直面している問題は、ソーステーブルに重複する行キーがあるため、エラーがOLE DB宛先から例外テーブルにリダイレクトされますが、例外テーブルで取得するエラーの説明は「ステータスがありません」です。 「PRIMARYKEY制約の違反..オブジェクトに重複キーを挿入できません..重複キー値は..」の代わりに「」パッケージのスクリーンショットと

スクリプトコードを次に示します。

public bool fireAgain = true;
public string customErrorDescription;
public string customErrorDescription;
public string ErrorDescription;
public string ErrorColumnDescription;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
try
{
    var component130 = ComponentMetaData as IDTSComponentMetaData130;

    if (component130 != null)
    {
        Row.DateTimeInserted = DateTime.Now;

        if (Row.ErrorColumn <= 0)
        {
            ErrorColumnDescription = "No Data available - Unknown Error";
        }
        else if (Row.ErrorColumn > 0)
        {

            ErrorColumnDescription = component130.GetIdentificationStringByID(Row.ErrorColumn);
        }
        ErrorDescription = component130.GetErrorDescription(Row.ErrorCode).Replace("\r\n", " ");

        //Writes the error as Information in Logging
        customErrorDescription =
         $"Error in OLE DB Destination:{ErrorDescription}" + $"In Column: {ErrorColumnDescription}";
        ComponentMetaData.FireInformation(10, "Error", "Error", ErrorDescription, 0, fireAgain);

        Row.ErrorDescription = ErrorDescription;
        Row.ErrorColumnDescription = ErrorColumnDescription;
        Row.DestinationTableName = Variables.DestinationTable;
        Row.SourceName = "Source_View";
        Row.SourceType = "View";
    }
}
catch (Exception Ex)
{
    ComponentMetaData.FireError(10, "Error", Ex.Message, Ex.Message, 0, out fireAgain);
}

}

切り捨てやnullが許可されていない列へのnull挿入などの他のエラーでは、これは正常に機能しているように思われることを述べておきます。

たとえば、切り捨てでは、「データ値がプロバイダーによって使用されるタイプをオーバーフローしたため、変換に失敗しました」というメッセージが表示されます。NULL制約違反では、「データ値が整合性制約に違反しています」というメッセージが表示されます。

なぜこれが重複キー挿入でのみ発生するのかについての提案や考えはありますか?前もって感謝します!

回答

Hadi Nov 29 2020 at 21:02

OLE DB変換先では、(1)クライアント側と(2)サーバー側の2種類の検証が実行されることに注意してください。詳細については、次の回答を確認してください。

  • 高速ロードエラー出力はバッチ全体をリダイレクトしません

SSISエンジンは、実行時にサーバー側エラー(外部キー、トリガーなど)の説明をキャッチしませんが、クライアント側検証エラーの説明(切り捨て、null以外...)は読み取り可能です。