作为数据库修订控制(和自动安装)过程的一部分,我们需要能够在ASP页面中的各种.sql文件上运行sqlcmd.exe。我用来做这个的代码是:
Dim cmd : cmd = "sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
Dim wshShell : Set wshShell = Server.CreateObject("WScript.Shell")
Dim return : return = wshShell.Run(cmd, 0, True)
我的代码在我的开发机器上运行(运行XP),但现在我已经将它部署到我们的Windows 2003服务器上,它有问题。问题是返回的值总是为1.如果我试图让它运行批处理文件或我能想到的任何其他东西(如果我将cmd的值更改为不存在的文件,它就会爆炸)也会发生这种情况。正如我所料)
我尝试添加I_USR和I_WAM以对sqlcmd.exe和cmd.exe都具有执行权限但它仍然返回1.如果我在服务器上打开命令提示符并执行“runas / user:servername \ i_usr” sqlcmd.exe“工作正常,但从ASP页面运行仍然无效。
此外,当手动运行.sql脚本时,一切都运行顺畅,所以没有问题。
服务器上是否有任何安全设置我忘记在IIS或Windows中进行更改以使其正常工作?
提前感谢互联网。
答案 0 :(得分:2)
通过将第一行更改为:
解决了问题Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
答案 1 :(得分:1)
你应该改变
cmd = "sqlcmd -S ...
到
cmd = "\windows\sqlcmd.exe -S ..
(或者sqlcmd.exe的完整路径没有空格)
只是为了排除路径问题。