在另一个变量的SET语句中使用一个变量

sri*_*amn 3 batch-file sqlcmd

我正在编写一个批处理脚本,用于SQLCMD将表从数据库服务器转储到本地计算机上.为此,我构造了查询,以便我可以灵活地指定表名.根据表名构造查询,然后在SQLCMD命令中使用该表名.用于构造查询的代码段如下所示:

@echo off
SET tableName = testDB
SET dumpTable="SET NOCOUNT ON; SELECT * FROM %tableName%"
ECHO %dumpTable%
Run Code Online (Sandbox Code Playgroud)

在运行此脚本时,我得到以下输出

"SET NOCOUNT ON; SELECT * FROM "
Run Code Online (Sandbox Code Playgroud)

tableName变量未在set语句中替换.我应该如何修改我的脚本来实现此输出:

"SET NOCOUNT ON; SELECT * FROM testDB"
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 6

=变量赋值中的符号周围不能有空格.替换这个:

SET tableName = testDB
Run Code Online (Sandbox Code Playgroud)

有了这个:

SET tableName=testDB
Run Code Online (Sandbox Code Playgroud)

此外,您不应该在变量赋值中使用双引号,因为双引号将成为值的一部分.最好在整个赋值中加上双引号,然后在使用它时根据需要引用变量,例如:

set "tableName=testDB"
set "dumpTable=SET NOCOUNT ON; SELECT * FROM %tableName%"
sqlcmd -d database -q "%dumpTable%"
Run Code Online (Sandbox Code Playgroud)