我编写了一个批处理脚本来获取特定值或从sql数据库更新值。 它仅适用于一些次,如下所示。
案例1:
第一次不起作用(不更新)但返回 - 受影响的行数
第二次工作(在db中更新)返回 - 受影响的行数
案例2:
有时会抛出错误(Sqlcmd:'用户名=':无效的参数。输入' - ?'寻求帮助。)
查找我的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)'
如何解决此问题?
答案 0 :(得分:0)
参考here
<强> 1 即可。启用延迟扩展
setlocal enabledelayedexpansion
<强> 2 即可。将传递的引用从%inputUserName%更改为!inputUserName!
它有效!!