用于检查DB Server Filesystem上是否存在文件的选项

时间:2013-08-23 13:23:15

标签: sql-server asp-classic file-processing sql-agent-job

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

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

启动的SSIS包处理

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

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

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

有了这个环境和经典ASP限制,这些是我考虑过的选项:

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

  1. 步骤发生在调用SSIS导入包之前/或作为单独作业运行。
  2. 它依赖于SQL Server代理作业“成功”或“失败”返回指示分别找到或未找到文件
  3. 问题:据我所知,它不是通用的。这意味着每个导入类型都有一个作业,因为一次只能处理一个作业,而作业不支持参数(是)。

    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 尚未尝试

    任何最佳实践或经验都将是最有帮助的。

1 个答案:

答案 0 :(得分:0)

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

所以我已经使用了xp_fileexist虽然我知道使用未记录的SP并不是一种好的做法(在下一版本中可以不加警告地删除它们)。