SSIS 2008对行计数和脚本组件使用相同的变量

Coo*_*raw 0 ssis etl sql-server-2008 sql-server-2008-r2 business-intelligence

我有一个行计数组件,它使用全局变量X来存储数字; 到目前为止,它规则但是如果我在其ReadOnly变量中添加一个脚本组件,然后在其中使用它出于某种目的,流程会暂停一段时间然后崩溃说行数需要一个有效的变量.

是不是可以将行计数存储在变量中,然后从脚本comp中读取此变量.?

Tod*_*mid 8

您不能在同一数据流中的任何其他位置使用在行计数转换中填充的变量.在数据流的PreExecute阶段,行计数锁定变量.尝试在脚本组件中使用该变量会使脚本尝试相同的事情(同时),因此SSIS会抛出错误.

但即使这没有发生,这里还有其他的事情发生.当您的数据流工作,并且行传递到行计数时,它实际上并没有用行计数填充SSIS变量.这将是非常低效的,因为行计数实际上是COM组件而SSIS变量是.Net.从COM使用.Net资源是"昂贵的",反之亦然.因此,行计数会在本地代码变量中累积值.在PostExecute阶段,Row Count然后将其收集的值推送到SSIS变量中.关键点是PostExecute阶段在数据流完成后发生.如果您能够在数据流中间的任何时间查看变量(有方法),您会看到它的值为零(或者在数据流开始之前设置的任何值).

如果要使用行数来执行条件操作,或者更新流中的行,则可以选择以下几种:

  • 您可以将数据流拆分为两个数据流.使用RAW文件或SQL表在流#1结束时保留"正在进行中"的数据,以便在流#2开始时使用它.
  • 您可以使用Multicast复制流,使用Aggregate组件对其进行计数,然后执行交叉连接以将行计数放到每一行上.(请参阅在SSIS中执行交叉连接(笛卡尔积).)