2015-10-13 71 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