2016-11-09 123 views
0

作为已存在的ETL过程的一部分,我不得不添加验证检查。
这涉及将CSV文件的记录计数与随附的元数据进行比较。比较SSIS中的两个变量

此时元数据已经存储在数据库中,我设法通过添加一个Execute SQL块并将输出存储到一个变量中来获取它。
一旦读取文件,作为数据流任务[已经在SSIS包中设计]的一部分,我使用数据流中的行计数转换块从此捕获行计数。

我需要比较这些值,如果不相等,则失败。

我该如何去做到这一点?

我试过到目前为止:

  1. 使用的脚本组件捕捉到2个变量作为只读输入,但没有工作的变量不能在脚本显然 内访问
  2. 用于查找转换,但我不能让它比较变量

任何想法?

+0

失败,你的意思是说,如果行数不相等的目的地(CSV /表)不应该填充?这就是你使用脚本组件的原因吗?如果没有,就像bilinkc在下面建议的那样,这是要走的路 – VKarthik

回答

0

重申,你有两个整数类型的变量,你需要弄清楚如何使SSIS包失败,如果他们不相等。您从数据流中捕获行数。数据流完成后,您可以将一个脚本任务(不是脚本组件)添加到控制流并传入@ [User :: DbRowCount]和@ [User :: DfRowCount]

然后,您会有东西你的脚本像

int dbRowCount = (int) this.Dts.Variables["DbRowCount"].Value; 
int dfRowCount = (int) this.Dts.Variables["DfRowCount"].Value; 
if (dbRowCount != dfRowCount) 
{ 
    this.Dts.Events.FireError(0, "Invalid row counts", "error", string.Empty, 0); 
    Dts.TaskResult = ScriptResults.Failure; 
}