我正在創建一個將在企業環境中跨幾十個Sql Server部署的代碼庫。 SQL Server版本大多爲2008年,但也存在一些2000年,2005年和2008R2實例。這些也運行在各種版本的Windows 2000-2008上。我需要能夠找到從該庫中的C#.NET代碼中調用的BCP的Sql Server版本。如何在SQL Server上查找BCP?
我不能依靠默認安裝目錄,因爲許多服務器沒有安裝在默認目錄位置的Sql Server。
我也不能依賴PATH變量,因爲許多這些服務器也安裝了Sybase驅動程序,它具有它自己的BCP版本(它不支持許多我們使用的BCP調用的查詢命令)和我們在依靠PATH環境變量返回Sybase位置而不是Sql Server位置時遇到了問題。
任何人都可以提出一個解決方案,讓我可以很容易地找到BCP的位置跨這些服務器給出這個不同的版本和約束?
編輯:
我曾想過使用SqlBulkCopy的,但是這是支持了一堆已經存在BCP的跨數據庫和存儲過程的調用多種。現在他們都調用存在於每個服務器上公共數據庫中的現有存儲過程,並且在該存儲過程中,模擬調用然後使用其提升的權限調用xp_cmdshell。出於安全原因,我們希望擺脫xp_cmdshell部分。我們想用一個CLR存儲過程來替換它,它找到BCP,然後傳遞這些參數,以便某個人不能使用該過程就地訪問cmd shell幾乎一樣容易。
BULK INSERT在我們的環境中也不起作用,因爲設置了安全權限的奇怪方式,並且由於某些原因,他們還沒有弄清楚,BCP無法使用不同的文件位置物理盒子。另外,我們的大多數BCP呼叫都是在創建文件,而不是導入它們。
我已經想到了這些長期滿足新需求的幾個問題,但請參閱上面對現有編輯的編輯。註冊表路徑似乎是目前最可能的選擇。 – BBlake 2011-06-17 14:10:26