微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在使用SSIS导入数据库之前验证CSV文件?

我有三列CSV文件.
sno sname quantity
--- ----- --------
1  aaa  23
2  bbb  null
3  ccc  34
4  ddd  ddd
5  eee  xxx
6  fff  87

sql Server数据库中的表如下/

CREATE TABLE csvtable
(       sno         int,sname       varchar(100),quantity    numeric(5,2)
)

我创建了一个SSIS包来将csv文件数据导入数据库表.我在包执行期间收到错误,因为数量一个字符串.我创建了另一个表来存储无效数据.

CREATE TABLE wrongcsvtable
(       sno         nvarchar(10),sname       nvarchar(100),quantity    nvarchar(100)
)

在csvtable中,我想存储以下数据.

sno  sanme   quantity
---  ------  --------
 1   aaa     23
 3   ccc     34
 6   fff     87

在wrongcsvtable中,我想存储以下数据.

sno  sanme   quantity
---  ------  --------
 2   bbb     null
 4   ddd     ddd
 5   eee     xxx

有人能指出我正确的方向来实现上述输出吗?

解决方法

这是一个可能的选择.您可以使用数据流任务中的数据转换转换来实现此目的.以下示例显示了如何实现这一目标.该示例使用SSIS 2005和sql Server 2008数据库.

分步过程:

>创建一个名为FlatFile.CSV的文件,并使用数据填充它,如屏幕截图#1所示.
>在sql数据库中,使用sql Scripts部分下提供的脚本创建两个名为dbo.CSVCorrect和dbo.CSVWrong的表.表dbo.CSVWrong中的字段应具有数据类型VARCHAR或NVARCHAR或CHAR,以便它可以接受无效记录.
>在SSIS包上,创建名为sqlServer的OLE DB连接以连接到sql Server数据库并创建名为CSV的平面文件连接.参见截图#2.配置平面文件连接CSV,如屏幕截图#3 – #7所示.平面文件连接中的所有列都应配置为字符串数据类型,以便在读取文件时包不会失败.
>在程序包的“控制流”选项卡上,放置数据流任务,如屏幕截图#8所示.
>在程序包的“数据流”选项卡上,放置一个平面文件源并对其进行配置,如屏幕截图#9和#10所示.
>在程序包的“数据流”选项卡上,进行数据转换转换并对其进行配置,如屏幕截图#11所示.单击Configure Error Output并将Error and Truncation列值从Fail组件更改为Redirect row.参见截屏#12.
>在包的“数据流”选项卡上,放置一个OLE DB目标,并将数据转换中的绿色箭头连接到此OLE DB目标.配置OLE DB目标,如屏幕截图#13和#14所示.
>在程序包的“数据流”选项卡上,放置另一个OLE DB目标,并将数据转换中的红色箭头连接到此OLE DB目标.配置OLE DB目标,如屏幕截图#15和#16所示.
>屏幕截图#17显示完成配置后的数据流任务.
>屏幕截图#18显示了包执行前表中的数据.
>屏幕截图#19显示了数据流任务中的包执行.
>屏幕截图#20显示了包执行后表中的数据.

希望有所帮助.

sql脚本:

CREATE TABLE [dbo].[CSVCorrect](
    [Id] [int] IDENTITY(1,1) NOT NULL,[SNo] [int] NULL,[SName] [varchar](50) NULL,[QuantityNumeric] [numeric](18,0) NULL,CONSTRAINT [PK_CSVCorrect] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[CSVWrong](
    [Id] [int] IDENTITY(1,[SNo] [varchar](50) NULL,[Quantity] [varchar](50) NULL,[ErrorCode] [int] NULL,[ErrorColumn] [int] NULL,CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

截图#1:

截图#2:

截图#3:

截图#4:

截图#5:

截图#6:

截图#7:

截图#8:

截图#9:

截图#10:

截图#11:

截图#12:

截图#13:

截图#14:

截图#15:

截图#16:

截图#17:

截图#18:

截图#19:

截图#20:

原文地址:https://www.jb51.cc/mssql/76470.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐