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

如何在使用SSIS导入数据库之前验证CSV文件?,ssis,Ssis,我有三列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)

我有三列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
sno  sanme   quantity
---  ------  --------
 2   bbb     null
 4   ddd     ddd
 5   eee     xxx
在错误的CSV表中,我想存储以下数据

sno  sanme   quantity
---  ------  --------
 1   aaa     23
 3   ccc     34
 6   fff     87
sno  sanme   quantity
---  ------  --------
 2   bbb     null
 4   ddd     ddd
 5   eee     xxx

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

在数据流中设置条件拆分。检查数量是否为非整数。您创建的分支将转到错误的csvtable,默认分支将转到csvtable


编辑忘记条件拆分中没有数字测试。您应该做的是添加一个派生列转换,将quantity字段转换为整数。在“配置错误输出”对话框中,将错误和截断值设置为“忽略失败”。如果数据不是数字,这将传递项,新字段的值为NULL。然后,在条件拆分中,检查新字段是否为null。带有空字段的记录转到错误csvtable,其他记录转到csvtable

这里是一个可能的选项。您可以使用
数据流任务
中的
数据转换
来实现这一点。下面的示例显示了如何实现这一点。该示例将SSIS 2005与SQL Server 2008数据库一起使用

逐步过程:

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,1) NOT NULL,
    [SNo] [varchar](50) NULL,
    [Quantity] [varchar](50) NULL,
    [SName] [varchar](50) NULL,
    [ErrorCode] [int] NULL,
    [ErrorColumn] [int] NULL,
CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
  • 创建一个名为
    FlatFile.CSV
    的文件,并用屏幕截图#1中所示的数据填充该文件

  • 在SQL数据库中,使用SQL脚本部分提供的脚本创建两个名为
    dbo.CSVCorrect
    dbo.CSVWrong
    的表。表
    dbo.CSVWrong
    中的字段应具有VARCHAR或NVARCHAR或CHAR数据类型,以便它可以接受无效记录

  • 在SSIS包上,创建名为SQLServer的OLE DB连接以连接到SQLServer数据库,并创建名为CSV的平面文件连接。请参阅屏幕截图#2。配置平面文件连接CSV,如屏幕截图#3-#7所示。平面文件连接中的所有列都应配置为string数据类型,以便包在读取文件时不会失败

  • 在包的“控制流”选项卡上,放置一个
    数据流任务
    ,如屏幕截图所示

  • 在软件包的数据流选项卡上,放置一个
    平面文件源
    ,并按照屏幕截图#9和#10对其进行配置

  • 在软件包的“数据流”选项卡上,放置一个
    数据转换
    转换,并按照屏幕截图11所示对其进行配置。单击
    配置错误输出
    并将错误截断列值从失败组件更改为重定向行。请参阅屏幕截图#12

  • 在包的数据流选项卡上,放置一个
    OLE DB目标
    ,并将数据转换中的绿色箭头连接到此OLE DB目标。配置OLE DB目标,如屏幕截图#13和#14所示

  • 在包的数据流选项卡上,放置另一个
    OLE DB目标
    ,并将数据转换中的红色箭头连接到此OLE DB目标。配置OLE DB目标,如屏幕截图#15和#16所示

  • 屏幕截图#17显示了完成配置后的数据流任务

  • 屏幕截图35;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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    
    屏幕截图#1:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#2:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图#3:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图#4:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图#5:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图#6:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#7:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#8:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#9:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#10:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#11:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#12:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#13:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图#14:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#15:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#16:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#17:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#18:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#19:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    截图#20:

    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,1) NOT NULL,
        [SNo] [varchar](50) NULL,
        [Quantity] [varchar](50) NULL,
        [SName] [varchar](50) NULL,
        [ErrorCode] [int] NULL,
        [ErrorColumn] [int] NULL,
    CONSTRAINT [PK_CSVWrong] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    我是SSIS开发的新手,您能解释一下如何检查条件吗。帮助我。