为什么在bat文件中以下sqlcmd调用返回0行? (手动通过)
问题描述:
我在编写批处理脚本时遇到了麻烦。我已经缩小到似乎打破了,我提供了一个例子。以下代码粘贴到控制台时会返回10行:为什么在bat文件中以下sqlcmd调用返回0行? (手动通过)
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)批量变量扩展和(2)SQL通配符。里面一个批处理文件,使用双%%标志为SQL通配符:之前它传递给SQLCMD
set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%%es'"
双重%标志被转换为单一%符号。
我无法回答你的问题,但你的WHERE条款看起来很腥。我认为它应该阅读'where testrunid LIKE'%TESTRUNID%''。为什么一个ID有字面百分号? –
@TimBiegeleisen %%是批处理脚本引擎解析TESTRUNID作为上面行中定义的值 – DraxDomax
'%es' - 它只有一个'%' – doctorlove