2012-02-07 33 views
0

我想制作一个只能在表格不为空的情况下从表中复制数据的包。我知道如何计数以及如何制作一个用于复制数据的包,但问题是Source无法输入任何内容,所以我不知道如何去做。有什么建议么?SSIS复制表如果不为空

+0

来源不能有任何输入? – joshua 2012-02-07 11:25:51

+0

我想说,你不能将绿线从包装拖动到源...或者我错了,我错过了什么? – 2012-02-07 11:38:29

回答

1

我不明白你的意见,关于拖拽一个“从包到源代码的绿线”,而不是试图提前确定表是否为空,只要做你的副本,然后看看有多少行复制:

  1. 的行数
  2. 创建一个包变量使用的行数转换
  3. 使用an expression in the precedence constraint检查变量填充变量:如果是大于零则继续执行你的包的其余部分
+0

如果表格不是空的,我必须截断destionation,否则保持原样。我的意思是,它不可能使用例如条件拆分组件(它将检查表是否为空),将优先级约束从它拖到OLE DB源,从中选择要复制的数据。 – 2012-02-07 12:44:36

+0

这个作品,谢谢! – 2012-02-07 13:01:50

0

@Pondlife我不认为你可以在数据流任务上使用优先约束,你能吗? 我相信你只能在控制流程中使用它。

我会添加一个“执行SQL任务”计数,发送结果到一个变量,并从这个任务,我会拖动绿色箭头到数据流任务,使复制和在这个箭头上,我会添加优先约束上的表达式。

+0

你对优先约束是正确的,但它并不重要:一旦你在变量中有rowcount,你可以在任何可以在数据或控制流中使用变量的地方使用它。你的建议与我的建议可能略有不同。 – Pondlife 2012-02-07 13:24:40

0

正如您已经正确指出的那样,数据流源不接受输入,因此无法在数据流中执行逻辑来确定是否应该运行此任务。

Cannot create connector. 
The destination component does not have any available inputs for use in creating a path. 

但是,没有什么能够阻止您在控制流程中设置此逻辑。我会使用一个查询,在目标系统上点击DMVs for a fast rowcount,只过滤我希望复制的表。

有了空表的列表,它可能取决于我如何处理它。对于少数表格,我将N个数据流定义为一个无作用的脚本任​​务作为先例,然后在表名称上使用一个表达式来启用路径,就像我在这个question上做的一样。

如果有许多表,我会为每个表定义一个包,然后根据空表名称动态构建包名来调用执行包任务。