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

标签 batch-file sqlcmd

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

@echo off
SET tableName = testDB
SET dumpTable="SET NOCOUNT ON; SELECT * FROM %tableName%"
ECHO %dumpTable%

运行这个脚本我得到以下输出

"SET NOCOUNT ON; SELECT * FROM "

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

"SET NOCOUNT ON; SELECT * FROM testDB"

最佳答案

在变量赋值中,= 符号周围不能有空格。替换为:

SET tableName = testDB

用这个:

SET tableName=testDB

此外,您不应在变量赋值中用双引号将值括起来,因为那样双引号将成为值的一部分。更好的做法是在整个赋值周围加上双引号,然后在使用时根据需要引用变量,例如:

set "tableName=testDB"
set "dumpTable=SET NOCOUNT ON; SELECT * FROM %tableName%"
sqlcmd -d database -q "%dumpTable%"

关于batch-file - 在另一个变量的 SET 语句中使用一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776789/

相关文章:

windows - 为什么 REG DELETE 命令在此批处理脚本中失败?

batch-file - 如何跳过批处理文件中发现的错误并继续执行命令行?

c# - c#执行完后关闭sqlcmd

sql - 在 azure devops 管道中部署 SQL 时面临错误

sql-server - SQLCMD 命令,如何将输出保存到日志文件中

batch-file - doskey 中的 `^&` 和 `$T` 行为相似但不相同

c# - 无法在 Windows Server 2012 中使用 powershell 或没有 gacutil 注册 dll gac

windows - 如何创建一个批处理脚本,在达到文件夹大小限制时删除最旧的文件

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

c# - 传递字符串参数时 'S'附近的语法不正确