sno sname quantity --- ----- -------- 1 aaa 23 2 bbb null 3 ccc 34 4 ddd ddd 5 eee xxx 6 fff 87
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
有人能指出我正确的方向来实现上述输出吗?
解决方法
分步过程:
>创建一个名为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: