2015-10-13 133 views
1

我是批处理新手。在批处理文件中使用While循环使用sql

我的代码:

@ECHO OFF 

    SET colu= 
    SET sn= 
    SET /P colu= Enter column name: 
    SET /P sn= Enter ID : 

    sqlcmd -U USER -P PWORD -S SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt -v delete=%colu% d_id=%%I 

    pause 

SET /P sn= Enter ID : 
    sqlcmd -U USER -P PWORD -S SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt -v delete=%colu% d_id=%%I 

pause 

SET /P sn= Enter ID : 
    sqlcmd -U USER -P PWORD -S SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt -v delete=%colu% d_id=%%I 

代码工作和做什么,我需要做的是从数据库中删除记录,但我希望有写它更有效的方式。

我将如何实现一个批处理while循环,这将继续要求用户输入id,直到他们按结束键?另外我意识到,拥有暂停之间sqlcmd是非常不方便。

回答

2

怎么是这样的:

@ECHO OFF 

SETLOCAL 

SET /P "colu=Enter column name:" 

:Prompt 
REM Clear any existing values. 
SET "sn=" 

ECHO Enter a blank value to stop the operation. 
SET /P "sn=Enter ID:" 

REM Check for exist conditions. 
IF "%colu%"=="" GOTO :EOF 
IF "%sn%"=="" GOTO :EOF 

REM If we get here, data was entered for both 
sqlcmd -U USER -P PWORD -S SERVER -d DBNAME-i sqlSCRIPT.sql -o LOG.txt -v delete=%colu% d_id=%sn% 
ECHO. 
ECHO. 

REM Ask again. 
GOTO Prompt 

:EOF 
ENDLOCAL 

,直到你输入任何colusn空值这将使提示。另外,我注意到你在你的SQL语句中使用了%%I - 我想你的意思是使用%sn%来代替。

+0

谢谢!这非常有帮助。 – royalblue

+0

看来你忘了清除'colu'也... – aschipfl