如何从ASP页面运行sqlcmd.exe?

时间:2009-02-25 18:18:16

标签: asp-classic windows-server-2003 sqlcmd

作为数据库修订控制(和自动安装)过程的一部分,我们需要能够在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中进行更改以使其正常工作?

提前感谢互联网。

2 个答案:

答案 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的完整路径没有空格)

只是为了排除路径问题。