我写了一个批处理脚本来获取特定值或从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)'
如何解决这个问题?
“不是第一次工作,但第二次”通常是[延迟扩展问题]的提示(http://stackoverflow.com/a/30284028/2152082)(有两个“if”块问题发生的地方) – Stephan
谢谢@Stephan。它的工作原理和得到了一个很好的解释:-) –
如果你解决了你的问题,不要改变你的问题。用解决方案添加答案并接受答案。 –