2011-06-17 81 views
0

我正在創建一個將在企業環境中跨幾十個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呼叫都是在創建文件,而不是導入它們。

回答

0

思考...

  • 您可以使用SqlBulkCopy的從你的.NET?
  • 或者從.net運行SSIS?
  • 或SQL BULK INSERT

話說,你可以找到的路徑

中當然,您的呼叫帳戶需要使用SQL權限或遠程讀取註冊表。使用SQL意味着使用SQL服務acount可以看到它自己的註冊表項

而在谷歌的許多結果「找到安裝路徑爲SQL Server」太(我上面摘走2)

+0

我已經想到了這些長期滿足新需求的幾個問題,但請參閱上面對現有編輯的編輯。註冊表路徑似乎是目前最可能的選擇。 – BBlake 2011-06-17 14:10:26

0

你能找到大部分你需要在服務器註冊表中?

我知道以下注冊表路徑有很多信息,包括路徑和版本。

HKLM \ SOFTWARE \微軟\ Microsoft SQL Server的\

或64位系統上:

HKLM \ SOFTWARE \ Wow6432Node \微軟\ Microsoft SQL Server的

有關Wow6432Node的信息,請參閱this question

+0

我在一臺64位的機器上,我假設一臺64位的機器上會有一個64位的SQL Server。因此不需要Wow6432Node。 – 2011-06-17 17:22:36