2009-01-27 156 views
2

我有一個Visual FoxPro表,我需要從Sql Server訪問。在Sql Server x86中,我只需創建一個鏈接服務器。不幸的是,VFP沒有x64驅動 - 所以Sql Server x64無法爲它創建鏈接服務器。Sql Server x64和x86鏈接服務器

到目前爲止,我想出了以下選項 - 其中沒有我特別喜歡:

  1. 設置x86 SQL Server以用作中繼,以便查詢從去x64 - > x86 - > VFP。

我真的不關心這個,因爲除了是開發,我也是系統管理員。所以,這意味着我需要修補,維護和監視另一個Sql Server - 可能還有另一個服務器(假設我不只是使用單獨的實例)。

此外,由於VFP提供程序不能使用4部分語法,因此必須使用OPENQUERY。所有的單引號逃逸的是思考就需要恰好有嵌入到另一個OPENQUERY語句的OPENQUERY語句讓我目瞪口呆....

  • 創建一個CLR表值函數,雖然議會將(可能?)也有64 - 所以我不得不出去PROC的(?IPC web服務)來實際運行查詢
  • 原來,TVFs需要一個架構,所以這個選項並不像我最初想象的那樣乾淨。我做了一個尖峯使WCF客戶端進入MSSQL,它返回一列XML,然後可以使用Sql XML數據類型函數進行分析。它的工作原理,實際上比OPENQUERY查詢更好一些,因爲它實際上將變量作爲參數。這節省了我大部分的單引號和EXEC舞蹈。

    當然,Sql裏面的WCF是完全不受支持的,聞起來像是一個很大的黑客攻擊。我對性能和可靠性有非常嚴肅的保留。

  • 停止使從SQL Server查詢VFP,和重寫的客戶端代碼好位
  • 顯然,這是 「正確」 的答案。但是,有大量的客戶端代碼依賴於Sql Server表和VFP表之間的連接。重寫這些東西來填充臨時表或者做客戶端連接似乎是一個相當大的負擔。

    這裏希望有人可以建議一個更好的選擇,或一些類似的經驗。

    +0

    當試圖將FoxPro數據轉換爲64位機器上的SQL Server時,我們遇到了類似的問題。因爲這是一筆一筆的交易與你的第一選擇。 – Clinemi 2009-01-30 06:00:50

    回答

    2

    這是一個討厭的問題,我同意。

    如果您可以忍受延遲,SSIS以32位模式運行以定期將數據導入到SQL Server本機表中(如果需要,可以在由同一SP觸發的作業中)。這將取決於數據更改的頻率以及稍有過時數據的機會。

    +0

    不幸的是,我們對實時數據很感興趣,並且表的大小使得導入一些PITA。不過,我會記住這一點,因爲sp_start_job然後阻止搜索結果實際上可能是最乾淨的選擇 - 就像聽起來那樣醜陋。 – 2009-01-29 21:42:30

    +0

    嘗試接力,然後 - 它不會傷害。你甚至可以在同一臺機器上的32位虛擬機上運行它。 – 2009-01-30 01:47:44

    0

    我想我找到了一個替代方案。微軟已經發布了一款updated driver for Access,它有32位和64位兩種版本。像原始的Jet OleDB驅動程序一樣,這將允許您從SQL Server x64到access dBase file formats

    唯一的限制是DBF必須位於dBASE formats supported by ISAM之一。我已經使用dBASE IV格式完成了一些測試,它似乎可以工作,使用以下連接字符串。

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;