我对ssis有一点怀疑。请告诉我如何解决这个问题
源表:emp id,名称有数据类型varchar(30),sal money
id| name | sal
1 | abc |100
,2"| def |2500
3 | ",rac"|1400
4 | ven |200
"5",| jai |100
10| ha |50
当我们将这些数据加载到目标表时,我们需要加载正确的数据
目标表数据类型也是id,名称有dataype varchar(30),sal money
目标表数据想要如下所示
目标表:emptarg
id | name | sal
1 | abc |100
4 | ven |200
10 | ha | 50
和errore记录加载到单独的表
中 error table:emperror
id | name | sal
,2" | def |2500
3 | ",rac"|1400
"5",| jai |100
当源数据具有特殊的symoble时,记录需要发送错误表。如何在条件拆分中以任何其他方式写入条件。
答案 0 :(得分:0)
由于您需要匹配多个字符,我建议使用以下方法;
bool
的{{1}}类型的输出列。在IsValid
脚本方法中,使用模式匹配来检查ProcessInputRow
列是否仅包含数字,而id
列仅包含字母。如果不是这种情况,请将name
设置为IsValid
。
false
using System.Text.RegularExpressions;
...
public class ScriptMain : UserComponent
{
bool isValid = true;
...
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Regex.IsMatch(Row.id, @"^[0-9]+$") && Regex.IsMatch(Row.name, @"^[a-zA-Z]+$"))
{
Row.derivedid = int.Parse(Row.id);
Row.derivedname = Row.name;
}
else
{
isValid = false;
}
Row.IsValid = isValid;
}
}
转换,并根据Conditional Split
是true还是false,将行重定向到相应的目标。