在 sqlcmd 查询中使用批处理变量

Using batch variable in sqlcmd query

我正在尝试创建一个批处理来执行一些 sql 脚本和一些查询。我在我的批次中使用 sqlcmd 是这样的:

@echo off
sqlcmd -S server -U user -P password -Q query

因为我将在同一台服务器上执行不同的查询,所以我想用一个变量替换服务器语句。所以我可以这样写:

@echo off
SET server=192.X.X.X
sqlcmd -S server -U user -P password -Q first query
sqlcmd -S server -U user -P password -Q second query

我在 SO 上发现了这个问题,但我仍然无法理解它是如何工作的:

SQLCMD using batch variable in query

有人知道吗?

非常感谢!

来自微软:"Cmd.exe provides the batch parameter expansion variables %0 through %9. When you use batch parameters in a batch file, %0 is replaced by the batch file name, and %1 through %9 are replaced by the corresponding arguments that you type at the command line."

因此,如果您希望执行的查询数量已知,只需通过如下参数传递它们:

Test.bat:

@echo off
SET server=192.X.X.X
sqlcmd -S server -U user -P password -Q %1%
sqlcmd -S server -U user -P password -Q %2%

然后像这样调用Test.bat:

Test.bat "Select * from Test1" "Select * From Test2"

您最多可以通过这种方式传递 9 个查询。

稍微扩展一下我的评论:

@Echo off
Set "server=192.X.X.X"
Set "user=myname"
Set "password=pa55w0rd"
sqlcmd -S %server% -U %user% -P %password% -Q first query
sqlcmd -S %server% -U %user% -P %password% -Q second query

您可能希望根据需要用相关引号括起您的变量。