我努力让我的批处理将参数传递给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。
答案 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;
行。