以编程方式更改列数据类型?

时间:2016-06-30 15:58:29

标签: visual-studio-2008 ssis bids

我正在维护由前一名工作人员创建的BIDS集成服务项目。不幸的是,我对BIDS没有任何经验。

该过程从平面文件(一系列CSV)中获取信息并将其导入我们的数据库。提供数据的客户端最近已切换到提供Unicode数据,因此我需要更新集成项目以适应这种情况。当前BIDS数据流为每列返回验证错误,“无法在unicode和非unicode字符串数据类型之间进行转换。”

问题:看起来我可以通过更新平面文件连接管理器来实现这一点,但我有几百个需要更改的字段。有没有办法以编程方式执行此操作?手动更改所有这些列的设置将花费大量时间并且很乏味。

我尝试过的事情:

  • 我可以使用派生列转换将每列从DT_STR转换为DT_WSTR。但是,有太多列可以手动执行此操作。看起来我必须指定每列的长度,这是一件苦差事。
  • 我也可以使用数据转换转换,但我必须再次手动点击每一列,搜索数据类型列表,然后选择我想要的那个。
  • 当前尝试:我正在尝试使用脚本组件。

3 个答案:

答案 0 :(得分:1)

您需要进行三次+更改:SSIS中有两个+,数据库中有一个。

SSIS将有一个Flat File Connection Manager,您需要将AnsiString类型的所有实例修改为String。

然后,任何具有引用修改后的平面文件连接管理器的平面文件源的Data Flow Tasks都需要更新以更正其元数据。

然后,可能需要调整SSIS包中的任何异步组件,因为它们可能无法获取元数据更改。

最后,您需要更新目标数据库表,以便从varchar数据类型转换为nvarchar。否则,SSIS将无法在目标上验证,而不是您现在遇到的源验证。

我已经通过编程界面对SSIS做了一些工作,我不会羡慕你面前的任务。当您可以使用脚本任务来检查SSIS包然后对其进行修改时,您最好能够制作专用的控制台/ winform应用程序来执行此操作。虽然它在SSIS或专用应用程序中是相同的调试器,但是如果不启动SSIS包然后打开脚本任务进行调试,则调试 - >更改 - >重新启动调试周期会更容易。

答案 1 :(得分:0)

我可以想到两种可能性:

使用.Net:

https://msdn.microsoft.com/en-us/library/ms136025.aspx

使用BIML:

http://bimlscript.com/

答案 2 :(得分:0)

最简单的方法是完全没有程序化。 BIDS允许您查看和编辑项目底层的XML。

要查看或编辑此XML,请转到查看 - >代码。

由于我想用unicode友好的WSTR数据类型替换所有STR数据类型,我只是对XML进行了find-replace。我替换了dataType =" str" with dataType =" wstr"和codePage =" 65001"使用codePage =" 0"。