由于您的组件是同步的,因此在您的代码中的某处,您正在同步输出 ,IDTSOutput1xx
与输入 , IDTSInput1xx
,代码如下:
output.SynchronousInputID = input.ID;
在同步组件中PipelineBuffer
(暴露于输出的组件,暴露于 中ProcessInput
)基于输入缓冲区(通常带有修改或添加的列),尊重原始行排序。
因此,如果您检查输入是否有序,则可以确保输出也是有序的。您可以使用一个属性从输入中读取此信息并将其设置在输出中:
output.IsOrdered = input.IsOrdered
考虑到true
即使输出未排序,您也可以将此属性设置为,但在这种情况下,您依赖于输入提供的信息,这应该是正确的。
您应该只true
在异步组件中显式更改此属性,在返回之前对行进行真正排序。但是,正如我所说,您可以撒谎,并将此属性设置为 true 而不返回有序行。换句话说,它是信息元数据。
如果这对您不起作用,您还必须SortKeyPosition
在output.OutputColumnCollection
. 此信息还用于Merge Join
确保输入除了被排序之外,还按所需列排序。
如果您想了解如何使用 SSIS 任务编辑器执行此操作,而不是在您的自定义组件中“自动”执行此操作,请阅读SSIS或SSIS #98中的 IsSorted 属性- IsSorted 是真的,但按什么排序?