2

我需要从批处理文件中运行大约 100 个 .sql 文件,以便将数据加载到我们应用程序的查找表中。我需要在加载过程开始之前禁用约束,并在过程完成后再次启用它。

我目前的代码是

    for /r "%ScriptsPathLookup%" %%f in (*.sql) do ( 
mysql --host=%Server% --port=%PortNumber% --user=%UserName% --password=%UserPassword% --database=%DB% <%ConstrainPath%\Constrain-disable.sql<%%f)

Here Constrain-disable.sql -> SET FOREIGN_KEY_CHECKS = 0;

但这不起作用。我相信如果我去输入'SET FOREIGN_KEY_CHECKS = 0;' 在所有 .sql 文件中,它将正确加载。这不是最好的方法,而且很难维护。任何人都可以提出更好的解决方案吗?谢谢。

4

1 回答 1

1

您的示例代码有双重输入重定向<,这是行不通的。一种相对简单的方法,使用与您相同的循环机制,包括创建一个顶部带有禁用代码的临时文件,然后将该文件与 MySQL 命令一起使用。

set TempFile="%TEMP%\MyTempSql.sql"
for /r "%ScriptsPathLookup%" %%f in (*.sql) do (
  type %ConstrainPath%\Constrain-disable.sql >%TempFile%
  echo.>>%TempFile%
  type %%f >>%TempFile%
  mysql --host=%Server% --port=%PortNumber% --user=%UserName% --password=%UserPassword% --database=%DB% <%TempFile%
)
del %TempFile%
于 2013-02-13T03:25:34.143 回答