如何通过批处理文件将变量值从命令行传递到SQL脚本
问题描述:
我一直在尝试传递一个变量值,我可以在命令行中输入以打开批处理文件,然后将该值传递给一个sql脚本。在这种情况下,我正在通过在命令行中设置它来将数据库用户的密码更改为新密码。如何通过批处理文件将变量值从命令行传递到SQL脚本
命令行 - update_passwords.bat服务器名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;
我得到一个不正确的语法附近 '%' 的错误,当我运行的批处理文件
任何帮助非常感谢
答
有两个主要问题。一个是%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
现在,如果新密码中有撇号,则需要通过将它们转换为加倍apostropes逃避它们。
鉴于您在设置变量后未使用sql_server_name
和newPass
变量,可以将它们完全删除。这将消除shawnt00提到的安全问题。
它看起来像你在顶部设置sql_server_name和newPass并从不使用它们。除此之外,你是否遇到了当前拥有的批处理文件错误?如果是这样,那么错误信息是什么? – gmm
im在命令行中指定服务器名称并将其作为%1传递给批处理文件,然后输入密码,我希望将db帐户的密码更改为%2。我在'%'错误附近得到错误的语法。感谢您对我的看法 – MollyMoo
您应该将有关错误消息的信息放入问题主体中。 – gmm