excel2003导入时间到sqlserver2005(这篇比较好)(转自:http://wep2008.blogbus.com/logs/35390970.html)

解决Excel文件中混合文本与时间格式的数据导入SQL Server时的问题,通过调整IMEX参数及使用特定SQL语句确保数据正确导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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.

好了。

 

 

----------------------

 以前常用的

 

SELECT   *

FROM      OPENDATASOURCE(

         'SQLOLEDB',

         'Data Source=ServerName;User ID=MyUID;Password=MyPass'

         ).Northwind.dbo.Categories

### 解决方案 当遇到 `logs directory does not exist` 的警告时,这通常意味着 Hadoop 配置文件中指定的日志目录路径不可用或未正确设置。以下是可能的原因以及解决方案: #### 原因分析 1. **配置错误**: 日志目录路径可能在核心配置文件(如 `core-site.xml` 或其他相关配置文件)中被误配或者缺失。 2. **权限问题**: 即使指定了正确的日志目录路径,但如果当前运行 Hadoop 的用户对该路径没有写入权限,则会触发此警告。 3. **路径不存在**: 如果日志目录尚未创建,Hadoop 将无法记录日志并抛出该警告。 --- #### 步骤说明 ##### 1. 检查配置文件中的日志路径 确认 Hadoop 配置文件中是否有如下属性及其值是否有效: ```xml <property> <name>hadoop.log.dir</name> <value>/path/to/logs</value> </property> ``` 如果缺少上述配置项,需手动添加到 `core-site.xml` 文件中[^1]。 ##### 2. 创建日志目录 确保日志目录已存在且具有适当的权限。可以使用以下命令来验证和修复: ```bash mkdir -p /path/to/logs chmod 755 /path/to/logs chown hadoop_user:hadoop_group /path/to/logs ``` ##### 3. 修改环境变量 (可选) 某些情况下,可以通过修改 Hadoop 环境变量进一步调整日志位置。编辑 `$HADOOP_HOME/etc/hadoop/hadoop-env.sh` 文件,添加或更新以下内容: ```bash export HADOOP_LOG_DIR=/path/to/logs ``` ##### 4. 清理缓存重试 重启 Hadoop 各服务组件以应用更改,并清理任何残留的临时数据: ```bash stop-dfs.sh && stop-yarn.sh rm -rf /tmp/hadoop-* start-dfs.sh && start-yarn.sh ``` --- ### 示例代码片段 假设需要通过脚本自动化完成以上操作,下面是一个简单的 Bash 脚本示例: ```bash #!/bin/bash LOGS_PATH="/path/to/logs" if [[ ! -d "$LOGS_PATH" ]]; then mkdir -p $LOGS_PATH fi chmod 755 $LOGS_PATH chown hadoop_user:hadoop_group $LOGS_PATH echo "Log path set to: $LOGS_PATH" ``` --- ### 注意事项 尽管解决了本地日志存储的问题,但在分布式环境中还需注意 NameNode 和 DataNode 上的日志同步机制。此外,在高可用部署场景下,建议统一管理所有节点上的日志路径配置以减少维护成本[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值