如何在SSIS包中使用变量和SQL代码?

时间:2015-06-15 19:47:28

标签: sql-server csv ssis import-from-excel dts

我正在构建一个SSIS包,用于从.CSV文件中获取数据并将其加载到SQL Server数据库的表中。 .CSV文件的列数多于我的表格,我希望根据未插入表格的某些列过滤掉数据。

我在.CSV文件中有年份,种类,类型,美元作为我的列名,但我只是在数据库中输入类型和美元。但是,我只能将那些行拉出来,其中kind =“L”,年份是当前年份(有一个主要警告)。如果进程在给定年份的第一季度运行(因此月份<= 3),则需要使用上一年作为我从.CSV文件中输入的行的限定符。例如,假设它是在2015年2月运行此程序包时,我需要它只提取2014年的行和来自.CSV文件的kind =“L”。如果是2015年9月那么它需要在2015年开出一行并且种类=“L”。

知道最好的方法是什么?现在我在我的包中有一个条件分割,但我只能说它年= =年(GETDATE()),这对第一季度不起作用。我需要某种变量逻辑来表示IF(currentmonth<=3 THAN @year = currentyear-1) ELSE (@year = currentyear)之类的东西,然后在条件分割中使用@year变量。这可能吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

通常对于这种工作流程,我会将整个CSV导入到临时表中,然后使用单独的SQL脚本或视图从临时表中读取并应用最终视图所需的任何业务逻辑。

答案 1 :(得分:0)

如果您希望逻辑位于SSIS包中,您可以使用派生列组件声明一个新的布尔字段,例如IncludeRowInOutput并将其设置为类似

((currentmonth <= 3 and year = year(getdate() - 1)) or (year = year(getdate))) and kind = 'L'

然后,您可以根据IncludeRowInOutput字段进行条件拆分。

我通常担心使用太多的脚本组件,我发现它们更难调试并且使数据流更难理解。