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

问题描述:

作为我们的数据库修订控制(和自动安装)过程的一部分,我们需要能够在ASP页面内的各种.sql文件上运行sqlcmd.exe。我使用的是做到这一点的代码是:如何从ASP页面运行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中更改以使其正常工作?

在此先感谢互联网。

这个问题是通过改变第一线,以解决:

Dim cmd : cmd = "%COMSPEC% /C sqlcmd -S " & DATABASE_SERVER & " -U " & DATABASE_UID & " -P " & DATABASE_PWD & " -d " & DATABASE_NAME & " -i """ & scriptPath & """ -b" 

你应该改变

cmd = "sqlcmd -S ... 

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

(或任何以sqlcmd.exe的完整路径是无空格)

只是为了排除路径问题。