2016-07-26 78 views
0

我寫了一個批處理腳本來獲取特定值或從sql數據庫更新值。 它只適用於一些次,下面列出。SQL通過批處理 - 不能很好地工作

案例1:

  • 第一次不工作(未更新),但回報 - 1行受到影響

  • 它的工作原理(在數據庫更新以及)返回第二次 - 1行受影響

殼體2:

有時會拋出一個錯誤(Sqlcmd:'username =':無效的參數。輸入' - ?' )

找到我的cmd錯誤here

請在下面找到我的腳本和sql代碼。

main.bat

@ECHO OFF 

:: DB Properties 
SET dbPath=XXXX 
SET dbUsername=YYYY 
SET dbPassword=ZZZZ 
SET dataBaseName=KKKK 

:: SQL Properties 
SET originId=50 

ECHO DB NAME - %dataBaseName% 

ECHO Select an option 
ECHO 1.Token 
ECHO 2.Activate 

SET /P option=Enter an option: 

IF "%option%"=="1" (SET /P inputUserName=Enter username: 
    sqlcmd -S %dbPath% -U %dbUsername% -P %dbPassword% -i token.sql -v dbName=%dataBaseName% username=%inputUserName%) 

IF "%option%"=="2" (SET /P inputUserName=Enter username: 
    sqlcmd -S %dbPath% -U %dbUsername% -P %dbPassword% -i update.sql -v dbName=%dataBaseName% username=%inputUserName% orgId=%originId%) 

ECHO Executed Successfully ..!! 

::PAUSE 

token.sql

use $(dbName); 

select VerificationCode from users where username = '$(username)' 

update.sql

use $(dbName); 

UPDATE users 
SET passwordHash = (SELECT PasswordHash FROM users WHERE userid = $(orgId)), 
    passwordsalt = (SELECT passwordsalt FROM users WHERE userid = $(orgId)), 
    isActive = 1, 
    emailConfirmed = 1 
WHERE username = '$(username)' 

如何解決這個問題?

+2

「不是第一次工作,但第二次」通常是[延遲擴展問題]的提示(http://stackoverflow.com/a/30284028/2152082)(有兩個「if」塊問題發生的地方) – Stephan

+0

謝謝@Stephan。它的工作原理和得到了一個很好的解釋:-) –

+0

如果你解決了你的問題,不要改變你的問題。用解決方案添加答案並接受答案。 –

回答

0

參考here

。使延遲擴展

​​

。將傳入的引用從%inputUserName%更改爲!inputUserName!

它的工作原理!

+0

雖然這是你的問題的正確答案,但你爲什麼不在'SET/P選項=輸入一個選項後輸入用戶名:'後輸入一個選項:'然後只是'if%%option%「= =「1」sqlcmd ...'和'if「%option%」==「2」sqlcmd ...'? – Stephan

相關問題