1

我正在维护一个访问单独服务器上的数据库(SQL Server 2012)的经典 ASP Web 应用程序。

这个遗留应用程序有很多集成工作。其中很多涉及在数据库服务器上托管的导入文件。这些由 SQL Server 代理作业运行并由 ASP COM+ 对象启动的 SSIS 包处理

我希望能够在运行导入包之前检查数据库服务器(与 Web 服务器分开)上是否存在导入文件。所以它应该能够失败并返回一个错误,表明一个文件没有找到。

我们的数据库和网络服务器曾经在同一台机器上。现在他们已经分开了。

此功能应该是通用的,以便我可以将其应用于所有导入,理想情况下,将文件路径作为参数传递。

在该环境和经典 ASP 限制下,这些是我考虑过的选项:

a)向运行 TSQL 的 SQL Server 代理作业添加一个步骤如下:

  1. 步骤发生在调用 SSIS 导入包/或作为单独作业运行的步骤之前。
  2. 它依赖于 SQL Server 代理作业“成功”或“失败”返回分别指示文件找到或未找到

问题:据我所知,它不是通用的。这意味着每种导入类型都有一个作业,因为一次只能处理一个作业,并且作业不支持参数(is)。

b)使用未记录的xp_fileexist存储过程如下

CREATE PROCEDURE [dbo].[spFileExists]
@fpath varchar(255)
AS
       begin
              DECLARE @fexists int
              EXEC master.dbo.xp_fileexist @fpath, @fexists output
              SELECT cast(@fexists as bit)
       end

GO

问题:我已经测试过这种方法,它访问的是 WEBSERVER 的文件系统,而不是 DATABASE 服务器的预期文件系统。如果我使用预期的路径将文件放在 Web 服务器中,它会返回 1 表示它在那里。如果我删除它并放在数据库服务器中,从 Web 服务器中删除,它返回 0。

为什么要检查 Web 服务器文件系统?

c)以 .NET 语言创建 SQL Server CLR 程序集并尝试使用 .NET 文件系统操作来访问数据库文件系统。还没试过

d)使用 sqlcmd 还没试过

任何最佳实践或经验都会很有帮助。

4

1 回答 1

0

我最终逐行修改了 COM+ 代码并重新访问了环境配置。b)现在工作我无法重现我遇到的问题,但我最好的假设是它与应用程序配置相关。

xp_fileexist因此,尽管我知道使用未记录的 SP 不是一个好习惯,但我还是求助于使用(在下一个版本中它们可以在没有警告的情况下被删除)。

于 2013-08-27T12:33:51.850 回答