以编程方式更改列数据类型?
Programmatically Change Column Data Types?
我正在维护一个由前任工作人员创建的 BIDS 集成服务项目。不幸的是,我对 BIDS 没有任何经验。
该过程从平面文件(一系列 CSV)中获取信息并将其导入我们的数据库。提供数据的客户端最近切换到提供 Unicode 数据,因此我需要更新集成项目以适应这种情况。当前 BIDS 数据流 returns 每列一个验证错误,"Cannot convert between unicode and non-unicode string data types."
问题:看起来我可以通过更新平面文件连接管理器来完成此操作,但我有数百个字段需要更改。有没有办法以编程方式执行此操作?手动更改所有这些列的设置将花费大量时间且乏味。
我尝试过的事情:
- 我可以使用派生列转换将每个列从 DT_STR 转换为 DT_WSTR。但是,列太多,无法手动执行此操作。看起来我必须指定每一列的长度,这是一件苦差事。
- 我也可以使用数据转换,但我还是必须手动单击每一列,搜索数据类型列表,然后选择我想要的。
- 当前尝试:我正在尝试使用脚本组件。
我想到了两种可能:
使用 .Net:
https://msdn.microsoft.com/en-us/library/ms136025.aspx
使用 BIML:
您需要进行三项以上的更改:两项以上在 SSIS 中进行,一项在您的数据库中进行。
SSIS 将有一个 Flat File Connection Manager 您需要将 AnsiString 类型的所有实例修改为字符串。
然后,任何具有引用修改后的平面文件连接管理器的平面文件源的 Data Flow Tasks 都需要更新以更正其元数据。
然后 SSIS 包中的任何异步组件都可能需要调整,因为它们可能无法接受元数据更改。
最后,您需要更新目标数据库表以从 varchar 数据类型变为 nvarchar。否则,SSIS 将无法在目标上验证,而不是像您现在遇到的那样在源上验证。
我已经从编程界面对 SSIS 做了一些工作,我不羡慕你面前的任务。虽然您 可以 使用脚本任务来检查 SSIS 包然后修改它,但您最好制作一个专门的 console/winform 应用程序来执行此操作。虽然它在 SSIS 或专用应用程序中是相同的调试器,但无需启动 SSIS 程序包然后打开脚本任务进行调试,调试->更改->重新启动调试周期要容易得多。
最简单的方法根本不是编程。 BIDS 允许您查看和编辑项目的 XML。
要查看或编辑此 XML,请转至查看--> 代码。
因为我想用 unicode 友好的 WSTR 数据类型替换所有的 STR 数据类型,所以我只是在 XML 上做了一个查找替换。我将 dataType="str" 替换为 dataType="wstr" 并将 codePage="65001" 替换为 codePage="0".
我正在维护一个由前任工作人员创建的 BIDS 集成服务项目。不幸的是,我对 BIDS 没有任何经验。
该过程从平面文件(一系列 CSV)中获取信息并将其导入我们的数据库。提供数据的客户端最近切换到提供 Unicode 数据,因此我需要更新集成项目以适应这种情况。当前 BIDS 数据流 returns 每列一个验证错误,"Cannot convert between unicode and non-unicode string data types."
问题:看起来我可以通过更新平面文件连接管理器来完成此操作,但我有数百个字段需要更改。有没有办法以编程方式执行此操作?手动更改所有这些列的设置将花费大量时间且乏味。
我尝试过的事情:
- 我可以使用派生列转换将每个列从 DT_STR 转换为 DT_WSTR。但是,列太多,无法手动执行此操作。看起来我必须指定每一列的长度,这是一件苦差事。
- 我也可以使用数据转换,但我还是必须手动单击每一列,搜索数据类型列表,然后选择我想要的。
- 当前尝试:我正在尝试使用脚本组件。
我想到了两种可能:
使用 .Net:
https://msdn.microsoft.com/en-us/library/ms136025.aspx
使用 BIML:
您需要进行三项以上的更改:两项以上在 SSIS 中进行,一项在您的数据库中进行。
SSIS 将有一个 Flat File Connection Manager 您需要将 AnsiString 类型的所有实例修改为字符串。
然后,任何具有引用修改后的平面文件连接管理器的平面文件源的 Data Flow Tasks 都需要更新以更正其元数据。
然后 SSIS 包中的任何异步组件都可能需要调整,因为它们可能无法接受元数据更改。
最后,您需要更新目标数据库表以从 varchar 数据类型变为 nvarchar。否则,SSIS 将无法在目标上验证,而不是像您现在遇到的那样在源上验证。
我已经从编程界面对 SSIS 做了一些工作,我不羡慕你面前的任务。虽然您 可以 使用脚本任务来检查 SSIS 包然后修改它,但您最好制作一个专门的 console/winform 应用程序来执行此操作。虽然它在 SSIS 或专用应用程序中是相同的调试器,但无需启动 SSIS 程序包然后打开脚本任务进行调试,调试->更改->重新启动调试周期要容易得多。
最简单的方法根本不是编程。 BIDS 允许您查看和编辑项目的 XML。
要查看或编辑此 XML,请转至查看--> 代码。
因为我想用 unicode 友好的 WSTR 数据类型替换所有的 STR 数据类型,所以我只是在 XML 上做了一个查找替换。我将 dataType="str" 替换为 dataType="wstr" 并将 codePage="65001" 替换为 codePage="0".