从UNIX上的Web应用程序调用存储过程,在xp_cmdshell上抛出错误

时间:2009-01-14 05:55:08

标签: sql-server ftp java-ee xp-cmdshell

嘿所有,我正在把这头发拉出来。

我已经在数据库服务器(SQL Server 2000)和文件系统上检查了我的所有权限,以确保我应该做的事情。情况如下:

我在公司内部网上的Tomcat服务器上运行了一个Java EE Web应用程序。简而言之,这个应用程序会对数字进行处理,创建一个以管道分隔的记录文件,将其BULK INSERT到我们的数据库中,并将该文件保存在UNIX服务器上。

然后调用一个存储过程,它利用xp_cmdshell将文件从UNIX FTP到我们的Windows SQL Server框,以便BULK INSERT该文件。当我从Management Studio调用此存储过程(以我们运行Web应用程序的tomcat用户身份登录)时,没有一个错误,FTP传输,文件已加载。

这是使我恶化的部分。

当Java EE应用程序调用此存储过程时,它实际上将文件FTP到SQL Server框,但即使成功,我最终也会得到SQLServerException。没有押韵或理由。但是......即使抛出了异常,我的文件最终也会在服务器上变得非常舒适。

SQL Server是否存在从UNIX服务器运行xp_cmdshell的问题(这听起来很荒谬,因为所有程序正在调用存储过程,我仍然在星期二晚上11:55在办公室晚上,所以我猜没有什么太可笑......)

任何见解都会很棒......

编辑:

另外,我一直在使用SQL事件探查器查看到SQL Server的流量...我可以看到我用来调用存储过程的实际语句。当我将其复制到SQL Server Management Studio并使用我的tomcat用户凭据执行它时,它执行完美......

1 个答案:

答案 0 :(得分:1)

哇。这就是为什么在晚上11点编写代码不好的原因。

xp_cmdshell在每次执行时返回结果集。它基本上为您提供命令行的输出,就像在命令提示符下看到的那样。这里的关键是结果集。

我调用调用存储过程的JDBC方法是issueUpdate(),它在返回的xp_cmdshell结果集上抛出异常。当我改为issQuery()时,我没有收到异常,其余代码执行完毕。

我认为我有一些工作要做清理,但我对此解决方案感到满意。