我有一个包含Active和Terminated员工的员工表,其中一个栏目是工作电子邮件。已终止的员工应列出其个人电子邮件,并且活跃员工应列出其工作电子邮件。但是,我从中提取信息的源系统允许活跃的员工更新他们的工作电子邮件。所以我有一些活跃的员工列出了他们的个人电子邮件。
出于我的目的,我需要所有活跃的员工列出他们的工作电子邮件。在SSIS中,解决我的问题的最佳方法是什么?
Ex:
Name Status Email
Bob Act bob@workdomain.com
Joey Ter joey234@yahoo.com
Randy Act randy23@hotmail.com
在这里,由于Randy是Active员工应该有一封以@ workdomain.com结尾的电子邮件,但是在源系统中我从Randy提取数据后将他的电子邮件更改为他的个人邮件。兰迪的电子邮件应该是:randy@workdomain.com
答案 0 :(得分:0)
我会像下面这样做(为了避免OLEDB转换 - 逐行操作)。
将数据加载到2个临时表(可能是临时表):
表#1中。 StageEmp:
Name Status Email
Bob Act bob@workdomain.com
Joey Ter joey234@yahoo.com
Randy Act randy23@hotmail.com
表#2:CorrectEmail
Name Email
Randy randy23@hotmail.com
在执行SQL任务:
中Update s
SET s.email = c.email
FROM StageEmp s
Join CorrectEmail c
ON s.Name = c.Name
where s.status = 'Act'
AND s.email not like '%@workdomain.com'
您应该使用key
列代替Name
。
将StageEmp的数据加载到实际表中或直接更新到实际表。
答案 1 :(得分:0)
据我所知,您有一个数据流任务,您可以在其中使用一个Excel Source从excel文件中获取数据。你可以这样做 -
var content = [{ id: 'tab1', langCode: 'en', title: 'rocket' }, { id: 'tab1', langCode: 'da', title: 'raket' }, { id: 'tab2', langCode: 'es', title: 'boligrafo' }, { id: 'tab2', langCode: 'en', title: 'pen' }],
object = Object.create(null);
content.forEach(function (a) {
object[a.id] = object[a.id] || {}
object[a.id][a.langCode] = a;
});
var result = Object.keys(object).map(k => object[k][Object.keys(object[k]).filter(l => l !== 'en')[0] || 'en']);
console.log(result);