2011-01-26 52 views
0

我正在将数据从平面文件中提取到SQL Server 2008表中。它包含我需要进行匹配的地址信息,所以我需要清理一些数据。清理SQL Server 2008中的传入字符串字段的有效方法?

我创建了一个通用缩写/术语表及其官方美国邮局对应表,然后创建一个函数,该函数可以接受地址字符串,并使用replace和缩写表中的数据返回已清理的地址字符串。

在导入后在表格上运行UPDATE,并在地址字段上执行SET,该函数返回的字符串很好,但速度很慢。我对SQL相当陌生,有没有更好的方法来做到这一点?也许在插入之前在SSIS导入期间?

+0

您是否考虑过在输入数据时从官方数据源验证数据?或者,对于现有数据,只需在导入之前通过清理(或“清理”)服务来运行地址列表它? – Matt 2012-01-23 22:17:52

回答

2

您可以将其作为查找来执行,也可以将数据放入临时表中,然后使用execute sql任务清理临时表,然后使用数据流执行到表的导入操作。我更喜欢这样做,原因有几个。首先,我将数据传输到两个表中,一个清理,一个与文件中的数据完全一样。这样,我可以查询数据的未编辑版本,我可以查询的数据的编辑版本以及真实表格中的数据。这有助于我研究数据导入问题。我可以很容易地看到问题是由于我的清理或他们发送的东西或由于数据存储方式(可能是pk/fk违规或某些要求它进入异常表(我也发送所有记录如果无法导入,则将它们记录到异常表中)进一步,我可以修复清理过程,如果没有连续运行冗长复杂的耗时过程而发生错误(并且在我确信它已经存在之前没有进入活动表一旦修复完成,通常我所要做的就是部署新版本的存储过程,而不是整个SSIS包。我发现这是能够将数据导入和支持数据导入的最佳模式,他们改变了。

1

这听起来像是在这种情况下,在SSIS包中,您可以对常用术语表执行查找,加入地址,然后输出干净地址,然后将干净地址传递到目标表中。这会在加载后切断更新步骤。

+0

我还没有尝试查找转换,我的地址字段是一个完整的地址,如“1234北榆树街”,我的条款表已经为像| North | N |和| Street | St |。鉴于数据的性质,可以使用Lookup吗? – DKnight 2011-01-26 19:32:39