2016-07-26 47 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

相关问题