我正在维护经典ASP Web应用程序在单独的服务器上访问数据库(SQL Server 2012)。用于检查数据库服务器上是否存在文件的选项文件系统
这个遗留应用程序有很多集成工作。 其中大部分涉及托管在数据库服务器上的导入文件。这些由SQL Server代理作业运行的SSIS包处理,并由ASP COM +对象启动
我希望能够检查导入文件是否存在或不在Web服务器上的数据库服务器(与Web服务器分开)运行导入包。所以它应该能够失败并返回一个错误,指示没有找到文件。
我们的数据库和web服务器曾经在同一台机器上。现在他们已经分开了。
此功能应该是通用的,以便我可以将它应用于所有导入,理想情况下,将文件路径作为参数传递。
有了这样的环境和经典的ASP限制,这些都是我所考虑的选择:
一)添加步骤的SQL Server代理作业运行TSQL如下:
- 步骤发生在调用SSIS导入包之前/或作为单独的作业运行。
- 它依赖于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 还没有试过没
任何的最佳做法或经验,将是最有帮助的。
xp_fileexist在数据库服务器上可能会失败,因为SQL Server服务帐户没有该目录的权限(或者,也许该文件实际上并不存在)。 –
@AaronBertrand我在我的文章中提到过测试它。 – user919426