如何在Batch脚本的sqlcmd命令中用变量指定MSSQL查询表
解决Batch脚本中sqlcmd调用表变量的问题
你的原命令存在两处明显语法错误:
- 变量引用写错了,把
%table%写成了%table&,少了结尾的百分号 - SQL语句的引号没闭合,
"select * from "%table&这里的引号嵌套逻辑混乱
下面是正确的实现方式:
1. 基础写法(表名无特殊字符)
先在Batch脚本里定义好变量,然后直接在sqlcmd的查询语句中引用:
@echo off :: 定义数据库和表变量 set "DATABASE=你的数据库名" set "table=你要导出的表名" :: 执行导出命令 sqlcmd -S .\database -U sa -P password -d %DATABASE% -Q "select * from %table%" -s "," -o "c:\save\info.csv"
2. 兼容特殊表名的写法
如果你的表名包含空格、SQL保留字等特殊字符,必须用方括号[]包裹表名,避免语法错误:
@echo off set "DATABASE=你的数据库名" set "table=带空格的表名" sqlcmd -S .\database -U sa -P password -d %DATABASE% -Q "select * from [%table%]" -s "," -o "c:\save\info.csv"
额外注意事项
- 确保
c:\save目录已经存在,否则sqlcmd无法生成CSV文件 - 如果密码包含特殊字符(比如
!、^等),需要用双引号把密码包裹起来,比如-P "your#pass!word" - 若要隐藏密码,建议改用
-E信任连接(Windows身份验证),或者避免在脚本明文写密码
内容的提问来源于stack exchange,提问作者Midnite
相关产品推荐
相关产品推荐

