将paramter从批处理传递给mysql文件

时间:2015-10-03 11:12:55

标签: mysql batch-file

我努力让我的批处理将参数传递给mysql文件

我的批次:

SET MYSQL_EXE="C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe"
SET DB_USER=root
SET DB_PWD=viper007
SET DB=db01

FOR %%c in (D:\Dev_Algo\Grt_pce\datas\*.*) do (
    set "str=%%c"
    SETLOCAL ENABLEDELAYEDEXPANSION
    call set "str=%%str:\=/%%"
    echo SET @fpath ='!str!' > params.sql
    ENDLOCAL
    type params.sql D:\Dev_Algo\Grt_pce\query0.sql | mysql --user=%DB_USER% --password=%DB_PWD% --database=%DB%    
    )

我的params.sql文件

SET @fpath ='D:/Dev_Algo/Grt_pce/datas/LBFLO007.csv'

我的sql文件(摘录)

SET @file=@fpath;
LOAD DATA INFILE @file IGNORE INTO TABLE db01.tblpce
    fields terminated by ';'
    ignore 1 lines

结果   - 我可以连接到mysql NO PROBLEM   - 我可以使用MYSQL Workbench的SQL命令加载我的文件   - Params文件正常,LOAD DATA INFILE需要单引号   - 我无法设置变量@fpath。我从批处理

收到错误消息

第1行的错误1064(4200):您的SQL synthax中有错误;检查手册......' SET @ file = @ fpath'在第2行

我读了这个http://bugs.mysql.com/bug.php?id=39115,显然这个功能没有实现。此限制是否与我的错误消息相关联。

如何绕过此错误,以便将批量csv导入mysql。

1 个答案:

答案 0 :(得分:2)

使用实际路径手动替换@file(例如,使用JREPL.BAT),将结果保存在另一个.sql文件中,与mysql一起使用。

set "str=%%c"
SETLOCAL ENABLEDELAYEDEXPANSION
call set "str=%%str:\=/%%"
call jrepl "@file" "'!str!'" <D:\Dev_Algo\Grt_pce\query0.sql >query.sql
ENDLOCAL
type query.sql | mysql --user=%DB_USER% --password=%DB_PWD% --database=%DB%    

从sql文件中删除SET @file=@fpath;行。