【问题标题】:Find all .sql-Files in a Directory and execute them with sqlcmd查找目录中的所有 .sql 文件并使用 sqlcmd 执行它们
【发布时间】:2020-06-24 11:28:51
【问题描述】:

我还是一个 CMD 初学者,我想将我在一个目录结构中的所有 SQL 文件用 sqlcmd 导入我的数据库。

如果我将所有 *.sql 复制到根文件夹中,则以下命令有效:

@ECHO ON
FOR %%G in (*.sql) DO sqlcmd /S *SERVER* /d *DB* /U *USER* /P *PW* -i"%%G" > LOG_lastrun.txt 2> LOG_errors.txt

pause
@ECHO ON
FOR /F "tokens=1 delims=sql" %%G in (*.sql) DO sqlcmd /S *SERVER* /d *DB* /U *USER* /P *PW* -i"%%G" > LOG_lastrun.txt 2> LOG_errors.txt

pause

不幸的是,它不适用于我的 FOR /F 循环。你能帮帮我吗?

【问题讨论】:

  • 向我们展示不起作用的命令(您尝试过的)。
  • @ECHO ON FOR /F "tokens=1 delims=sql" %%G in (*.sql) DO sqlcmd /S *SERVER* /d *DB* /U *USER* /P *PW* -i"%%G" > LOG_lastrun.txt 2> LOG_errors.txt pause
  • for 有什么问题(没有/F)?你想要for /F 做什么?或者你真的需要for /R

标签: batch-file cmd command-line sqlcmd


【解决方案1】:

FOR /F 的工作方式不同。它运行一个命令。 Jusr *.sql 不是命令。另外,我怀疑您想使用 >> 连接 stdout 和 stderr 输出。

@ECHO ON
SET "SERVER_NAME=*SERVER*"
SET "DB_NAME=*DB*"
SET "LOGIN_ID=*USER*"
SET "PASS=*PW*"

FOR /F "delims=" %%G IN ('DIR /B "*.sql"') DO (
    sqlcmd  -S %SERVER_NAME% -d %DB_NAME% -U %LOGIN_ID% -P %PASS% -i "%%~G" >> LOG_lastrun.txt 2>> LOG_errors.txt
)

pause

【讨论】:

  • 我必须添加 IN ('DIR /S /B "*.sql"') - 现在完美运行,我想我明白了 ;-) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
相关资源
最近更新 更多