zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    数据结构与算法复习(三)归并排序
    编程练习-扑克牌
    编程练习-字符串处理及简单排序
    spi驱动框架学习记录
    mt7628网口引脚设置成通用GPIO的方法
    数据结构与算法复习(二)插入排序
    数据结构与算法复习(一)快速排序
    基于input子系统的按键驱动程序
    基于设备树编写按键中断驱动程序
    Linux读写权限整理 --chmod
  • 原文地址:https://www.cnblogs.com/Alenliu/p/4226115.html
Copyright © 2011-2022 走看看