把Excel的数据导入到数据库

将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name

第一部分,Excel中的数据类型是数值类型

1,使用SSDT创建一个package,创建Excel data source component,SSDT会在Connection Managers中创建一个Excel的connection

由于示例Excel的首行是列名,所以需要勾选"First row has column names",Excel connection manager 如下

2,数据源组件将Excel中的数据读取出来,并传递给其他组件,数据源组件其实是有输入和输出的,输入是指将Excel的数据导入到数据源组件中,输出是指将数据源组件中导入的Excel数据向下传递。

打开数据源组件的Advanced editor,通过Show Advanced Editor来打开

在Input and Output Properties选项卡中,External columns是Excel数据源组件的输入列,Output Columns是Excel数据源组件的输出列,每一列都是有DataType和CodePage。

默认情况下,SSIS的Excel链接器将Excel中的数字作为数值类型来对待

对于External columns,可以根据实际需要修改DataType和CodePage,对于数值类型,不需要关注CodePage,但是对于字符类型,CodePage就必须匹配,否则package在run时就会fail。

由于示例Excel的两列的值都是数字,SSIS默认设置DataType为数值类型,对于DataType,虽然可以修改,但是数据源组件并不负责DataType的转换,如果External columns 和Output Columns的DataType不相同,run的时候会抛出error。如果需要convert DataType,需要使用Data Conversion 组件。

3,在db中创建接收Excel数据的表tbExcel,数据类似是Nvarchar,接收的数据是数值型,这样并不会报错。

create table dbo.tbExcel
(
code nvarchar(10),
name nvarchar(10)
)

4,创建一个Oledb数据目标组件,打开Advanced Editor,看到Ole db Destination Input 也有两个:

External columns:是DB中的目标表的数据列及其属性信息,本例是指 tbExcel 表的列和属性

Input Columns:是上游数据源组件传递的数据列及其属性信息

5,设置数据源组件和数据目标组件的列的mapping,execute package,成功导入13 rows 数据

第二部分,将Excel中的数据类型修改为文本类型

6,如果Excel source 中的数据是文本类型,实现起来必须考虑CodePage。

修改示例Excel,将name列修改为文本类型

7,将Db中的目标表做修改,将数据列修改为varchar

if object_id(‘dbo.tbExcel‘) is not null
drop table dbo.tbExcel

create table dbo.tbExcel
(
code varchar(10),
name varchar(10)
)

8,在execute package的过程中,ssis抛出错误信息,也就是说Excel中的文本使用的数据类型是unicode 的,而varchar并不是unicode,所以必须进行转换,在package中加入Data converion组件进行转换

===================================

Package Validation Error (Package Validation Error)

===================================

Error at Data Flow Task [OLE DB Destination [166]]: Column "name" cannot convert between unicode and non-unicode string data types.

Error at Data Flow Task [SSIS.Pipeline]: "OLE DB Destination" failed validation and returned validation status "VS_ISBROKEN".

Error at Data Flow Task [SSIS.Pipeline]: One or more component failed validation.

Error at Data Flow Task: There were errors during task validation.

(Microsoft.DataTransformationServices.VsIntegration)

9,execute package,仍然出错,错误原因是Code Page 不匹配,在数据传递的过程中,不能将code page为1252的数据传递到codepage为936的目标表中

Error at Data Flow Task [OLE DB Destination [203]]: The column "Copy of name" cannot be processed because more than one code page (1252 and 936) are specified for it.

下图是Ole db Destination Input,在External columns中查看name的属性,codepage是936,Input columns中查看name的属性,codepage是1252

由于列 copy of name是从Data Conversion中转换而来的,所以只需要修改一下转换后的数据列的CodePage就可以了。

10,设置列的mapping,再次Execute package,一路泛绿,成功导入13 rows

第三部分,一点小总结

  • Excel的文本,默认的数据类型是Unicode,长度是255
  • DB中的Varchar 不是unicode类型,nvarchar是unicode类型
  • 如果codepage不一致,可以通过data conversion组件进行转换
时间: 2024-12-27 16:21:29

把Excel的数据导入到数据库的相关文章

怎样把 excel 的数据导入到数据库里面去

1. 把 excel 另存为 .csv 格式 2. 用 Notepad 打开 .csv 文件, 第一行就是所有的字段 3. 创建表结构 create table yu_rt_01 as select Transaction_Id,Last_Update_Date,Last_Updated_By,Creation_Date,Created_By,Last_Update_Login,Request_Id,... ,Lcm_Shipment_Line_Id from rcv_transactions

Java版将EXCEL表数据导入到数据库中

1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls")); //获取该工作表中的第一个工作表 Sheet sheet=workBook.getSheet(0); //获取该工作表的行数,以供下面循环使用 int rowSize=sheet.getRows(); for(int i=0;i<rowSize;i++) { //编号 String

将 excel文件数据导入MySQL数据库中

第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创建数据库及表出现中文乱码和查看编码方法: 1.创建数据库的时候:CREATE DATABASE `test` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; 查询字符编码: show variables like'character%'; 将数据库修改

Excel的数据导入到数据库中

导入数据的时候就是怎么链接Excel表?链接的时候最好有后缀名. DataSet myDataSet = new DataSet(); //创建一个数据链接 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0"; OleDbConnection myConn = new OleDbConn

Excel表数据导入数据库表中

***Excel表数据导入到数据库表中 通过数据库表的模板做成‘Excel’表的数据导入到数据库相应的表中(注意:主表 和 从表的关系,要先导‘主表’在导入从表) 过程:通过数据库的导入工具—先导入为一张临时表,在插入到正式表中.语句如下: --YK_TYPK插入数据 insert into YK_TYPK --插入'YK_TYPK(通用品库)'数据 select * from Sheet1$_TYPK_caoyao ---------------------------------------

Execl数据导入到数据库及一个数据库导入到另一个数据库

一:首先是Execl导入到数据库(数据库以2008为例) 需求:把Execl的数据导入到数据库. 方法:把Execl的数据导入到本地数据库,再从本地数据库读取数据,添加到要添加的数据库即可. 1,把Execl第一行命名,这里导入到数据库对应的是数据库的字段属性,下方的Execl名称对应的是数据库表名称. 2.链接本地数据库,把Excel的数据导入到数据库.如下图 选择要导入到的数据库名称,右键>任务>导入数据>弹出对话框,直接点击"下一步" 点击下一步 点击"

excel数据导入导出数据库

第一种方法: 先把Excel另存为.csv格式文件,如test.csv,再编写一个insert.ctl 用sqlldr进行导入! insert.ctl内容如下: load data          --1.控制文件标识 infile ‘my.csv‘          --2.要输入的数据文件名为my.csv append into table "tbl_test"   --3.向表table_name中追加记录 fields terminated by ‘,‘          

利用TOAD实现把EXCEL数据导入oracle数据库

利用TOAD实现把EXCEL数据导入oracle数据库 工具:   Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然后Database->Import->Table Data打开了导入窗口,如下图   选择一个数据库表,点击Show Data按钮,可以显示表中的内容 其中schema 就是这张表的所属用户 Object type 就是 table Object name 就是表的名称 Commit mode 

Excel表数据导入Sql Server数据库中

Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nvarchar类型, tt nvarchar类型(注意:my_test表中的数据类型必须与Excel中相应字段的类型一致) 2. 我们用SELECT * FROM  OPENROWSET( 'Microsoft.Jet.OLEDB.4.0 ', 'Excel  5.0;DatabASE=[Excel表