4

作为我们的数据库修订控制(和自动安装)过程的一部分,我们需要能够在 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 服务器,它遇到了问题。问题是 return 的值始终为 1。如果我尝试让它运行批处理文件或我能想到的任何其他东西,也会发生这种情况(如果我将 cmd 的值更改为不存在的文件,它就会爆炸正如我所料)

我尝试添加 I_USR 和 I_WAM 以对 sqlcmd.exe 和 cmd.exe 都具有执行权限,但它仍然返回 1。如果我在服务器上打开命令提示符并执行“runas /user:servername\i_usr sqlcmd.exe " 工作正常,但从 ASP 页面运行仍然无法正常工作。

此外,当手动运行 .sql 脚本时,一切都运行顺利,因此它们没有问题。

服务器上是否有任何我忘记在 IIS 或 Windows 中更改以使其正常工作的安全设置?

提前感谢互联网。

4

2 回答 2

2

通过将第一行更改为:

Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b"
于 2009-10-26T14:46:58.920 回答
1

你应该改变

cmd = "sqlcmd -S ...

cmd = "\windows\sqlcmd.exe -S ..

(或者 sqlcmd.exe 的完整路径没有空格)

只是为了排除路径问题。

于 2009-03-30T23:06:33.090 回答