Sqlcmd:无效参数 - 尝试将变量传递给 sqlcmd 时

Arv*_*wen 6 scripting sql-server-2016

我正在尝试在 Server 2012R2 上使用 DOS 命令提示符来运行包含以下内容的批处理。我想运行一个 SQL 命令 (sqlcmd) 并将结果返回到命令窗口。

这就是我目前正在尝试的,但 sqlcmd 不断抛出Sqlcmd: 'test': Invalid argument. Enter '-?' for help.20:56:08.

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S localhost -E -i "backup.sql" -v dbname="test"`) DO (
    Echo %%F
)
Run Code Online (Sandbox Code Playgroud)

但是,如果我在没有参数/变量的情况下尝试它,它会完美运行!

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S localhost -E -i "backup.sql"`) DO (
    Echo %%F
)
Run Code Online (Sandbox Code Playgroud)

有没有人知道使用 sqlcmd、DOS CMD 以及 FOR /F 循环(例如在我的第一个示例中)将变量传递给我的 sql 查询的方法?

Sco*_*red 3

在有效的命令中,没有等号 (=)。当您运行失败的命令并查看输出时,您应该注意到等号消失了。那是因为该字符需要使用插入符号进行转义。在下面的示例中,请注意等号之前的插入符号

尝试:

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S localhost -E -i "backup.sql" -v dbname^="test"`) DO (
    Echo %%F
)
Run Code Online (Sandbox Code Playgroud)