我正在維護經典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