Hi,
I have this scenario:
In SSIS I have "For Each Loop" with list of files to process.
When one file fails somewhere (for example data type is wrong) next
file should be processed.
When next file is bigger than 100kB Table Difference fails with this
error:
Table Difference [34971]: System.Exception: Consumer Exception --->
System.NullReferenceException: Object reference not set to an instance
of an object.
at Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer.AddRow()
at
CozyRoc.SqlServer.SSIS.TableDifference.OutputInformation.AddRowToOutputBuffer(Row
row)
at CozyRoc.SqlServer.SSIS.TableDifference.processBuffers()
--- End of inner exception stack trace ---
at CozyRoc.SqlServer.SSIS.TableDifference.PostExecute()
at
Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPostExecute(IDTSManagedComponentWrapper100
wrapper)
Error: 0xC0047018 at DFT Load FactSales data, SSIS.Pipeline: component
"Table Difference" (34971) failed the post-execute phase and returned
error code 0x80131500.
... but when next file is small (<100kB) Table Difference works fine.
I've tried to find if anyone else had this problem and found a page:
http://sqlblog.com/blogs/alberto_ferrari/archive/2008/02/22/tabledifference-version-2-0-has-been-released.aspx
where founder of Table Difference wrote that this is old bug.
Also, in source code of version 2.0 I found this comment, that might
be useful:
// Starting from SQL 2008 the PostExecute method is
called imediately after all input have been read,
// this makes the parallel processing of the consumer
thread stop working, as the component buffers
// are being deallocated during its execution.
//
// For this reason, in the case where both inputs have
finished reading data, we DO NOT RETURN FROM
// ProcessInput until the consumer thread has finished
its work. It's an awful solution as it
// is a trick to fool SSIS that is not able to understand
that a component might be parallel and
// process its rows in a separate thread.
//
// Blame to microsoft for:
//
// Not having documented this behavior change in any
way
// Implemented a so silly way of handling concurrency
in components
//
//
Any suggestions?
Thank you in advance
Best regards
Michal