1

大家好,我正在把头发拉出来。

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

我有一个 Java EE Web 应用程序在我公司 Intranet 上的 Tomcat 服务器上运行。长话短说,这个应用程序处理数字,创建一个以管道分隔的记录文件,将其批量插入到我们的数据库中,并将文件保存在 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 Profiler 查看到 SQL Server 的流量……我可以看到我用来调用存储过程的实际语句。当我将它复制到 SQL Server Management Studio 并使用我的 tomcat 用户凭据执行它时,它完美地执行......

4

1 回答 1

1

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

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

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

我想我需要做一些工作来清理这个问题,但我对这个解决方案很满意。

于 2009-01-14T06:06:56.490 回答