我有两个数据库。来源数据库: http://sdrv.ms/VkX8tj
和星际数据库: http://sdrv.ms/12S7Zkc
我正在使用SSIS项目将数据从第1个传输到第2个: sdrv.ms/YDUvU4
(不能发布第3个链接,抱歉给您带来不便)
正如您所看到的,我的脚本中存在错误。它是“该列具有空值”。或者确切地说(通过弹出窗口):
at Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.CheckStatusAndNull(Int32 columnIndex) 在Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.GetDecimal(Int32 columnIndex) 在ScriptMain.Input0_ProcessInputRow(Input0Buffer Row) 在UserComponent.Input0_ProcessInput(Input0Buffer Buffer) 在Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID,PipelineBuffer buffer) 在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer buffer)
和(通过调试器的输出):
错误:0xC0047062在数据流任务,脚本组件[337]:Microsoft.SqlServer.Dts.Pipeline.ColumnIsNullException:该列具有空值。 在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(例外e) 在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer buffer) 在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方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
除了填写这个函数之外,我的脚本完全是模板化的:
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;
}
“列具有空值”意味着什么,但它是输入列还是输出一个,哪一个确切?怎么弄明白呢?
顺便说一下,请不要注意这个项目的基于内容的价值,因为它已经完成(好了,我希望这样做)仅用于教育目的。
答案 0 :(得分:3)
查看您的架构,没有列似乎允许NULL。因此,源列中的值为NULL是不可能的。
您可以将失败的行重定向到其他目的地并查看它以识别有问题的行。
拉吉