2013-08-23 16 views
1

我正在维护经典ASP Web应用程序在单独的服务器上访问数据库(SQL Server 2012)。用于检查数据库服务器上是否存在文件的选项文件系统

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

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

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

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

有了这样的环境和经典的ASP限制,这些都是我所考虑的选择:

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

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

问题未找到:据我所知,这是不通用的。这意味着每种进口类型都有一份工作,因为一次只能处理一项工作,而工作不支持参数(是)。

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 

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

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

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

d)使用SQLCMD 还没有试过没

任何的最佳做法或经验,将是最有帮助的。

+0

xp_fileexist在数据库服务器上可能会失败,因为SQL Server服务帐户没有该目录的权限(或者,也许该文件实际上并不存在)。 –

+0

@AaronBertrand我在我的文章中提到过测试它。 – user919426

回答

0

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

所以我尽量使用xp_fileexist,但我知道使用未公开的SP不是很好的做法(它们可以在未经警告的情况下移除)。

相关问题