2013-08-23 20 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不是很好的做法(它們可以在未經警告的情況下移除)。

相關問題