SSIS在计算机之间以不同方式导入数

时间:2014-03-14 20:59:43

标签: visual-studio-2008 csv ssis sql-server-2008-r2 etl

我正在使用VS 2008创建一个SSIS包,我发现当包被移动到另一台机器时,相同的包正在以不同方式导入数据。

在我的SSIS包中,我有一个首先运行的脚本任务,运行正常。下一步是获取CSV文件(在脚本任务中创建)并将其导入数据库。为了测试这个,我在VS中执行以下操作:

构建我的解决方案 构建我的SSIS包 从VS

运行SSIS包

所有这一切都很好。然后我转到DTSX文件所在的bin文件夹,然后我从该包中创建一个SQL作业。

当我运行这个包时,我注意到它失败了,当我深入挖掘时,它失败了,因为从CSV文件导入的数据也引用了引用到表中的引号,如下所示:

PolicyNumber    FamilyMemberID  LastName
"000001"            "A"         "Wilkinson"
"000001"            "Z"         "Wilkinson"
"000002"            "R"         "Trujillo"

它应该是这样的:

PolicyNumber    FamilyMemberID  LastName
000001              A           Wilkinson
000001              Z           Wilkinson
000002              R           Trujillo

我很困惑,因为我针对相同的文件运行相同的软件包,但它只是在两台不同的机器上执行,我不认为这样的事情可能是一个权利问题。

另外,我对CSV文件的设置是使用引号作为文本限定符

http://imgur.com/GdNJCrJ

1 个答案:

答案 0 :(得分:0)

右键单击Flat File Source,单击Show Advance Editor,单击Input and Output Properties,展开Flat File Source Output,展开External Columns,单击显示的每个列并更改DataType属性  每列的Unicode_String,然后对输出列执行相同的操作。看看这是否有帮助。

按照上述过程并将“(引号)”保留为文本限定符,您将不得不使用2个派生列转换,并使您的数据流看起来像以下屏幕截图:

enter image description here

在第一个派生列转换中,输入您在屏幕截图中看到的内容,如下所示:

enter image description here

在第二个派生列转换中,输入您在屏幕截图中看到的内容,如下所示:

enter image description here

希望这有帮助。

注意:我使用Excel目标进行测试,根据您的解决方案,您将需要使用OLE DB目标对象或OLE DB Command对象。