请教:把dos导出的文件名做为变量,传给mysql
背景:R:\2012-04-19,R:\2012-04-20,这样的目录很多(一天一个目录,日期号为目录名),而且这样的目录下面也有很多sz000555.xls,sh60000.xls类似文件(前缀是股票代码)。要求:把这些文件夹下的文件导入数据库。文件名为表名,如无则创建,文件夹名由“YYYY-MM-DD”变为“YYYYMMDD”做为rq字段的值。
进展:
一、现通过cmd的批处理模式下执行nyt.bat。
C:\Documents and Settings\Administrator>mysql -u root -p < nyt.bat
nyt.bat内容如下:
use stock;
CREATE TABLE sz000548
(
rq date not null,
sj time not null,
cjj decimal(8,2) unsigned not null,
ss mediumint not null,
bs char(1) not null,
index (rq,cjj,bs)
);
load data infile 'R:/2012-04-19/sz000548.xls' into table sz000548 IGNORE 1 LINES(sj, cjj,@dummy,ss,@dummy,bs) set rq = 201200419;
测试通过,可以建表,导入数据。
二、使用cmd命令,获取目录下的文件名
echo off &for /f "tokens=*" %i in ('dir/b/a') do echo %~ni >>files.txt
把所有文件名导出到了files.txt中。
下面一步怎么解决:
把导出的文件名做为变量,传给mysql。在建表、导入数据中使用? 主要是想遍历一个目录,把里面的文件导入到mysql中,文件名做表名,目录名做为表里的一个字段名。
但是不知道mysql如何获取这两个变量。
有高手没? 目前,表名不能被参数化,用动态SQL可以解决,给你个例子照着写就可以了:USE `XXDB`$
DROP PROCEDURE IF EXISTS `USP_LoadTableData`$
CREATE DEFINER=`admin`@`%` PROCEDURE `USP_
LoadTableData`(v_TableName VARCHAR(64))
BEGIN
DECLARE v_stat VARCHAR(200);
SET @v_stat=CONCAT('select * from ',v_TableName);
PREPARE SelectTableData FROM @v_stat;
EXECUTE SelectTableData;
END$
DELIMITER ;
http://www.mysqlpub.com/thread-30998-1-1.html
页:
[1]