J'ai écrit un script batch pour obtenir une valeur particulière ou mettre à jour des valeurs depuis la base de données sql. Il fonctionne seulement pour fois fois, énumérés ci-dessous.SQL par lot - Ne fonctionne pas bien
Cas 1:
Première ne fonctionne (pas mis à jour), mais renvoie - 1 lignes affectées
La deuxième fois, il fonctionne (mise à jour bien db) retourne - 1 lignes affectées
cas n ° 2:
parfois lancé une erreur (Sqlcmd: 'username =': argument non valide. Entrer '-?' pour obtenir de l'aide.)
Rechercher l'erreur cmd here.
Veuillez trouver mon script et le code SQL ci-dessous.
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)'
Comment résoudre ce problème?
"Ne fonctionne pas la première fois, mais la seconde fois" est généralement un indice d'un [problème d'expansion différée] (http://stackoverflow.com/a/30284028/2152082) (il y a deux 'if' blocs où ce problème se produit) – Stephan
Merci @Stephan. Cela fonctionne et a une bonne explication :-) –
Ne changez pas votre question si vous avez résolu votre problème. Ajoutez une réponse à la solution et acceptez cette réponse. –