为什么以下sqlcmd调用在bat文件中返回0行? (手动传递)

时间:2017-04-24 15:26:20

标签: sql batch-file scripting sqlcmd

我在编写批处理脚本时遇到问题。我把它缩小到看似破坏的地方,我正在提供一个例子。粘贴到控制台中时,以下代码返回10行:

set TESTRUNID=111222
set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%es'"
start /B /wait sqlcmd -S dahost -U usr -P pwd -Q %QUERY% -o resfile.txt

当我把它放在批处理脚本中时,它会返回0行!

@echo off
setlocal EnableDelayedExpansion
REM remark
REM remark
set TESTRUNID=111222
set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%es'"
start /B /wait sqlcmd -S dahost -U usr -P pwd -Q %QUERY% -o resfile.txt

1 个答案:

答案 0 :(得分:1)

我认为你正在混淆使用百分号来表示(1)批量变量扩展,以及(2)SQL通配符。在批处理文件中,对SQL通配符使用双%%符号:

set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%%es'"

双重%符号在传递给SQLCMD之前会被转换为单个%符号。