我一直在尝试传递一个变量值,我可以在命令行中输入该值来打开批处理文件,然后将该值传递给sql脚本。在这种情况下,我希望通过在命令行中设置将数据库用户的密码更改为新密码。
命令行 - update_passwords.bat server_name 1234
批处理文件 -
@echo off
set sql_server_name=%1
set newPass=%2
osql -S %1 -U dbuser -P user_pass -v newPass=%2 -i c:\sql_script -o c:\sql_log
sql file -
ALTER LOGIN user1 WITH PASSWORD = %2;
运行批处理文件
时,我在'%'附近出现错误的语法错误非常感谢任何帮助
答案 0 :(得分:1)
有两个主要问题。一个是%2
在c:\sql_script
中不可用,所以SQL语句试图将密码设置为"%2",字面意思。您可以通过在命令行而不是在输入文件中传递SQL语句来解决此问题。第二个问题是SQL语句需要%2
周围的引号。请尝试以下方法。
osql -S %1 -U dbuser -P user_pass -q "ALTER LOGIN user1 WITH PASSWORD = '%2';" -o c:\sql_log
现在,如果新密码中包含撇号,则需要通过将它们转换为双引号来转义它们。
如果您在设置后未使用sql_server_name
和newPass
变量,则可以完全删除它们。这将消除shawnt00提到的安全问题。