2

私は2つのデータベースを持っています。ソースデータベース: http ://sdrv.ms/VkX8tj

およびスターデータベース: http ://sdrv.ms/12S7Zkc

SSISプロジェクトを使用して1番目から2番目にデータを転送しています:sdrv.ms/YDUvU4

(3番目のリンクを投稿できません。ご不便をおかけして申し訳ありません)

ご覧のとおり、スクリプトにエラーがあります。「列にNULL値があります」と表示されます。または正確には(ポップアップウィンドウによって):

Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.CheckStatusAndNull(Int32 columnIndex)at Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.GetDecimal(Int32 columnIndex)at ScriptMain.Input0_ProcessInputRow(Input0Buffer Row)at UserComponent.Input0_ProcessInput(Input0Buffer Buffer)at Microsoft .SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID、PipelineBuffer buffer)at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID、PipelineBuffer buffer)

および(デバッガーの出力による):

エラー:0xC0047062、データフロータスク、スクリプトコンポーネント[337]:Microsoft.SqlServer.Dts.Pipeline.ColumnIsNullException:列にnull値があります。Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID、PipelineBuffer buffer)at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100ラッパー、Int32 inputID、IDTSBuffer100 pDTSBuffer、IntPtr bufferWirePacket)エラー:0xC0047022、データフロータスク、SSIS.Pipeline:SSISエラーコードDTS_E_PROCESSINPUTFAILED。コンポーネント「スクリプトコンポーネント」(337)のProcessInputメソッドは、入力「入力0」(347)の処理中にエラーコード0x80131600で失敗しました。識別されたコンポーネントは、ProcessInputメソッドからエラーを返しました。エラーはコンポーネントに固有ですが、エラーは致命的であり、データフロータスクの実行を停止します。この前に、障害に関する詳細情報を含むエラーメッセージが投稿される場合があります。

私のスクリプトは、次の1つの関数に入力することを除いて、テンプレートとまったく同じです。

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    decimal WorkerWage = Row.Amount * Row.HourWage * Row.ProductionHours;
    Row.WorkerWage = WorkerWage;

    decimal TotalProductionCost = Row.Amount * Row.ProductionHours * (Row.ProductionCost + Row.HourCost) + WorkerWage;
    Row.TotalProductionCost = TotalProductionCost;

    decimal StandardPrice = TotalProductionCost * (1 + Row.Profit/100);
    Row.StandardPrice = StandardPrice;

    decimal TotalDiscount = StandardPrice * (Row.Discount / 100);
    Row.TotalDiscount = TotalDiscount;

    decimal TotalPrice = StandardPrice - TotalDiscount;
    Row.TotalPrice = TotalPrice;

    decimal TotalShippingCost = Row.ShippingCost + TotalPrice * (Row.ShippingTax / 100);
    Row.TotalShippingCost = TotalShippingCost;

    decimal RealProfit = TotalPrice - TotalProductionCost;
    Row.RealProfit = RealProfit;

    decimal TraderMargin = RealProfit * (Row.ProfitMargin / 100);
    Row.TraderMargin = TraderMargin;
}

「列にnull値がある」とは何かを意味しますが、それは入力列ですか、それとも出力列ですか。正確にはどちらですか。それを理解する方法は?

ちなみに、このプロジェクトは教育目的でのみ行われているので(まあ、行われることを願っています)、このプロジェクトのコンテンツベースの価値に注意を払わないでください。

4

1 に答える 1

4

Looking at your schema, none of the columns seem to allow NULL. Ergo, the value being NULL from a source column would be improbable.

You can redirect the failed rows to a different destination and look at it to identify the offending rows.

Raj

于 2012-12-31T04:53:33.047 に答える