zoukankan      html  css  js  c++  java
  • 在SQL Server的查询分析器中使用命令导入Excel表格中的数据

    excel文件中有一时间列,混合了文本与时间,如 傍晚 凌晨 12:15 其中 hh:mm居多,使用DTSWizard导入虽然方便但是hh:mm都变成了NULL,在导入设置中设置导入数据类型不能实现。

    需要语句实现,下面的语句都可以实现:

    Microsoft Jet 数据库引擎可以通过可安装的索引顺序访问方法 (ISAM) 驱动程序,访问格式为其他数据库文件(例如 Excel 工作簿)的数据。要打开 Microsoft Jet 4.0 OLE DB 提供程序所支持的外部格式,请在连接的扩展属性中指定数据库类型。Jet OLE DB 提供程序对于 Microsoft Excel 工作簿支持下列数据库类型:

    Excel 3.0
    Excel 4.0
    Excel 5.0
    Excel 8.0

    注意:对于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0 源数据库类型;对于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0 源数据库类型。本文中的示例使用的是格式为 Excel 2000 和 Excel 2002 的 Excel 工作簿。 

    代码
    1.

    SELECT *  into newtable1

    FROM OpenDataSource'Microsoft.Jet.OLEDB.4.0',

      
    'Data Source="C:\yyyy_wind.xls";

    User ID=;Password=;Extended properties="Excel 8.0;HDR=YES;IMEX=1"
    ')...sheet1$ 

    2.

    SELECT *   into newtable2

    FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',

    'Data Source=C:\yyyy_wind.xls;Extended Properties="Excel 8.0;HDR=YES;IMEX=1"')...sheet1$

    3.

    SELECT *  into newtable3

     
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

    'Excel 8.0;Database=C:\yyyy_wind.xls;HDR=YES;IMEX=1', sheet1$ )

    这sheet指的是excel默认的sheet1,可以修改,文件路径取实际路径。

    网上其实好多资料,但是由于使用OpenDataSource和OPENROWSET都可以实现,又加上双引号" "单引号''混用,难以搞清楚。关键问题是这样的使用OpenDataSource时,Extended Properties的内容分号间隔并用双引号括起来,sheet1$ 在括号外,OPENROWSET相对简洁.

    下面介绍HDR和IMEX两个参数

    HDR为YES,excel文件的首行作为sqlserver表的列名,为NO则作表的第一行。

    IMEX=1 意思是 tells the driver to always read "intermixed" data columns as text

    在这里driver的意思是excel的驱动程序。

    Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时),驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。(如果各种数据类型的数量相当,则采用数值类型。)

    Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。(有说在写入excel表时就全部设定为文本,可以,囧!)

    SQLSERVER2005由于安全性的提高,直接使用上述语句还是有问题的(2000可以直接用)。

    按提示进行如下操作:

    从开始菜单进入到 配置工具 > sql server 2005 外围应用配置器  >  服务和连接的外围配置器 >  Datebase Engine 启动服务,然后重启sqlserver服务。由于sql server 2005没有了2000那样任务栏右下角的图表,所以需要通过控制面板进入管理工具 >  服务 停止 后启动 sqlserver 服务。  

    然后运行 regedit 进入注册表编辑器 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Providers\Microsoft.Jet.OLEDB.4.0 新建DWORD  名为DisallowAdhocAccess 值为0.

  • 相关阅读:
    Layui 两个table 人员选择 多选
    iphone7 忘记密码 重装系统
    使用hql-统计连续登陆的三天及以上的用户
    azkaban群起/群停脚本
    Hive读取索引文件问题:select * 和select count(*)读取出来的行数不一致
    scala/java等其他语言从CSV文件中读取数据,使用逗号','分割可能会出现的问题
    hadoop3.1.3版本的secondaryNamenode的web界面不能显示的问题?
    启动kafka消费报错:WARN [Consumer clientId…] 1 partitions have leader brokers without a matching listener,…
    centos6和centos7的防火墙命令,以及它们的区别是是什么?
    kafka项目经验之如何进行Kafka压力测试、如何计算Kafka分区数、如何确定Kaftka集群机器数量
  • 原文地址:https://www.cnblogs.com/lavenderzh/p/1648605.html
Copyright © 2011-2022 走看看