Excel导入MS SQL SERVER 操作

关于Excel导入到sql操作的相关问题总结:

一、大批量数据导入

方法1、从Excel大批量数据导入时我们可以使用sql里面有一个batch copy的功能

方法2、在sql中建一个table type结构,在前端将excel读到datatable中,把整个datatable作为存储过程参数传到后台数据库。

举例:

c#:

public void Import(DataTable dt)
        {
            SqlParameter[] parms = new SqlParameter[] { 
                new SqlParameter("@DataTable",SqlDbType.Structured)
            };

            parms[0].Value = dt;

            SQLHelper.ExecuteNonQueryStoredProcedure(ConnString, "ImportExcel", parms);
        }

 

SQL:

--创建table type

CREATE TYPE [dbo].[DataTable_TYPE] AS TABLE( [NO] [varchar](20) NULL, [Dept] [varchar](20) NULL, [EmployeeNO] [decimal](18,2) NULL, [EmployeeName] [nvarchar](50) NULL, [JoinDate] [datetime] NULL, [TotalScore] [decimal](18, 2) NULL, [JobQty] [int] NULL, [JobI] [decimal](18, 2) NULL, [JobJ] [decimal](18, 2) NULL, [JobK] [decimal](18, 2) NULL, [JobL] [decimal](18, 2) NULL, [JobM] [decimal](18, 2) NULL, [JobN] [decimal](18, 2) NULL, [JobO] [decimal](18, 2) NULL )

--导入数据存储过程
create proc ImportExcel
@DataTable DataTable_TYPE readonly
as
begin
  insert into XXtable
  select ......
  from @DataTable
end

 注意:在导入excel数据时,很多时候将excel读到datatable的时候,excel里的数值列会变成科学计数法,这时请将对应的表或table type的列的类型设为decimal即可。

也有说在数据库select的时候直接用cast(cast(abc as float) as decimal(xxx,xx)), 但这好像会有一个问题就是四舍五入的问题,比如 10056390 科学计数法为 1.00564e+007 转换后会变成 10056400

 

转载于:https://www.cnblogs.com/Alenliu/p/4226115.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值