为什么以下 sqlcmd 在 bat 文件中调用 returns 0 行? (手动通过)
Why does the following sqlcmd call returns 0 rows when in a bat file? (passing manually)
我在编写批处理脚本时遇到问题。我已将其缩小到似乎无法解决的问题,并提供了一个示例。以下代码,当粘贴到控制台时 returns 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
当我把它放在批处理脚本中时,它 returns 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 通配符使用双 %% 符号:
set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%%es'"
双 % 符号在传递给 SQLCMD 之前被转换为单个 % 符号。
我在编写批处理脚本时遇到问题。我已将其缩小到似乎无法解决的问题,并提供了一个示例。以下代码,当粘贴到控制台时 returns 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
当我把它放在批处理脚本中时,它 returns 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 通配符使用双 %% 符号:
set QUERY="select distinct col1 from Table where col2='%TESTRUNID%' and col3 LIKE '%%es'"
双 % 符号在传递给 SQLCMD 之前被转换为单个 % 符号。