我一直在构建一个SSIS包,它使用不同的模式在两个数据库之间传输数据。在目标数据库中,一列具有唯一键约束,并且需要从2个源数据库列填充数据,如:
SELECT (LOWER(LEFT(Col1.Column1, 5)) + LOWER(LEFT(Col1.Column2, 5)))
即。每列的前5个字符,如果有重复,则加上最后的递增数字。
递增数字必须取决于前10个字符,因此每个不同的变体都有自己的递增数字。例如:
Dest.Column
apapapap1
apapapap2
apapapap3
epepepep1
epepepep2
此软件包也每周运行一次,因此向SSIS OLEDB源添加必要的列将不起作用。
所以我的问题是:是否有可能在写入目标数据库之前在SSIS中执行此转换,如果是,如何?
答案 0 :(得分:0)
假设您正在使用SQL Server,您可以使用partition by
在源SQL语句中执行此操作,例如:
select
C.Column1 + C.Column2 +
case
when (select count(1) from Col1 C1 where C1.Column1 = C.Column1 and C1.Column2 = C.Column2) > 1 then
cast(row_number() over (partition by C.Column1 + C.Column2 order by C.Column1, C.Column2) as varchar)
else
''
end
from
Col1 C
这不包括左(,5),但添加起来很简单。对于任何相同的10-char组合,它会添加一个数字,因此对于
的输入 abcdef
,ghijkl
abcdef
,ghijkl
abcdef
,ghijkl
lmnopq
,rstuvw
xyzabc
,defghi
xyzabc
,defghi
...你得到:
abcdefghijkl1
abcdefghijkl2
abcdefghijkl3
lmnopqrstuvw
xyzabcdefghi1
xyzabcdefghi2
SQL小提琴here。
答案 1 :(得分:0)
使用自定义查询执行此操作将是此处的首选选项,但如果您必须在SSIS中执行此操作,则可以尝试在SSIS中生成2列,其中一列附加源中的两列( source1 < / em>),以及另一个包含目的地的这些组合(删除号码后)( dest1 )。然后,您可以配置查找块并计算与 source1 中每个条目对应的 dest1 列中的条目数,并将(此数字+1)附加到< EM> source1中