为了模拟您所遇到的问题,我使用
SSIS 2008 R2
和
SQL Server 2008 R2
后端创建了以下示例。该示例基于我从您的问题中收集到的信息。该示例并未提供解决方案,但可能有助于您确定问题可能出在哪里。
创建一个简单的CSV文件,其中包含两列,即订单号和订单日期。如您在问题中提到的,两列的值都用双引号(")限定,并且每行以换行符(\n)结束,日期是最后一列。下面的屏幕截图是使用
Notepad++拍摄的,它可以显示文件中的特殊字符。屏幕截图中的LF表示换行符。
![Orders file](https://istack.dev59.com/xz0yi.webp)
在SQL Server数据库中创建了一个名为
dbo.Destination
的简单表,使用SSIS包填充CSV文件数据。以下是该表的创建脚本。
CREATE TABLE [dbo].[Destination](
[OrderNumber] [varchar](50) NULL,
[OrderDate] [date] NULL
) ON [PRIMARY]
GO
在SSIS包中,我创建了两个连接管理器。使用OLE DB连接创建了
SQLServer以连接到SQL Server数据库。
FlatFile是一个平面文件连接管理器。
![Connections](https://istack.dev59.com/4Z8RG.webp)
Flat file连接管理器被配置为读取CSV文件,以下是设置。红色箭头表示所做的更改。
为Flat file连接管理器提供名称。浏览到CSV文件的位置并选择文件路径。将双引号 ("
) 设为文本限定符。将Header行分隔符从 {CR}{LF} 更改为 {LF}
。此Header行分隔符更改也反映在Columns部分。
![Flat File General](https://istack.dev59.com/Vtxlh.webp)
在"Columns"部分没有进行任何更改。
![Flat File Columns](https://istack.dev59.com/GkaC2.webp)
将列名从Column0更改为OrderNumber
。
![Advanced column OrderNumber](https://istack.dev59.com/OqrZ0.webp)
将列名从Column1更改为OrderDate
,并将数据类型更改为date [DT_DATE]
![Advanced column OrderDate](https://istack.dev59.com/mYrj5.webp)
平面文件连接管理器中的数据预览看起来很好。
![Data Preview](https://istack.dev59.com/ZJAIT.webp)
在SSIS包的
控制流程
选项卡上,放置一个
数据流任务
。
![Control Flow](https://istack.dev59.com/vY1N9.webp)
在数据流任务中放置了一个Flat File Source
和一个OLE DB Destination
。
![Data Flow Task](https://istack.dev59.com/ZJJ2S.webp)
< p >
Flat File Source
被配置为使用FlatFile连接管理器读取CSV文件数据。以下三张截图展示了如何配置Flat File源组件。
![Flat File Source Connection Manager](https://istack.dev59.com/kGO0g.webp)
![Flat File Source Columns](https://istack.dev59.com/NihoO.webp)
![Flat File Source Error Output](https://istack.dev59.com/MNxhP.webp)
这个 OLE DB Destination
组件被配置成从 Flat File Source
接收数据并将其插入到名为dbo.Destination
的SQL Server 数据库表中。以下三张截图展示了如何配置OLE DB Destination组件。
![OLE DB Destination Connection Manager](https://istack.dev59.com/tPom6.webp)
![OLE DB Destination Mappings](https://istack.dev59.com/SjErd.webp)
![OLE DB Destination Error Output](https://istack.dev59.com/7a6YS.webp)
使用以下5个截图中提到的步骤,在Flat File Source和OLE DB Destination之间的流程中添加了一个数据查看器。
![Right click](https://istack.dev59.com/hCzc1.webp)
![Data Flow Path Editor New](https://istack.dev59.com/2gy0V.webp)
![Configure Data Viewer](https://istack.dev59.com/xuYvQ.webp)
![Data Flow Path Editor Added](https://istack.dev59.com/eNAj5.webp)
![Data Viewer visible](https://istack.dev59.com/JbbLf.webp)
在运行程序包之前,我验证了表中的初始数据是否存在。目前它是空的,因为我使用本文开头提供的脚本创建了它。
![Empty Table](https://istack.dev59.com/nFpDv.webp)
执行了该包并且包的执行暂停以显示从扁平文件源流向OLE DB目标的数据查看器中的数据流。我点击运行按钮以继续执行。
![Data Viewer Pause](https://istack.dev59.com/RMhqJ.webp)
软件包已成功执行。
![Successful execution](https://istack.dev59.com/uzPMf.webp)
平面文件源数据已成功插入到表格dbo.Destination
中。
![Data in table](https://istack.dev59.com/KpjDF.webp)
这是表dbo.Destination的布局。您可以看到,字段
OrderDate是数据类型
date,且包仍然能正确插入数据。
![Destination layout](https://istack.dev59.com/QVZIK.webp)
尽管这篇文章并不是一个解决方案,但希望能帮助您找出问题在您的情况下可能出现的地方。