如何通过批处理文件将变量值从命令行传递到sql脚本

时间:2016-01-22 17:21:52

标签: sql-server batch-file sqlcmd

我一直在尝试传递一个变量值,我可以在命令行中输入该值来打开批处理文件,然后将该值传递给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;

运行批处理文件

时,我在'%'附近出现错误的语法错误

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

有两个主要问题。一个是%2c:\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_namenewPass变量,则可以完全删除它们。这将消除shawnt00提到的安全问题。