2013-09-28 48 views
6

一個我已經知道的問題沒有相當的答案。SQL Server 2012關鍵字覆蓋

我有一個第三方應用程序,我不能更改。應用程序的數據庫已經從MS Access轉換到SQL Server 2012.該程序連接到ODBC並且不關心後端。它發送相當直接的SQL,似乎也很好地在SQL Server上工作。

然而,有一個名爲「PLAN」的表有一個問題,我已經知道它是一個SQL Server關鍵字。

我知道你通常會用方括號訪問這樣的表格,但是因爲我是而不是能夠改變SQL我想知道是否有任何「醜陋」的黑客可以覆蓋關鍵字或變換SQL在飛行中。

+0

您是否嘗試過圍繞關鍵字的方括號?我有一張名爲user的表,我總是必須:'dbo。[User]' –

+1

我刪除了我的答案,因爲我現在看到了更多關於你正在嘗試做的事情。問題是你不能改變你的SQL和它的寫入,因爲這是不是一個問題,因爲它是從'PLAN'不是關鍵字的訪問轉換而來的。現在它存在於sql中,其中'PLAN'是一個關鍵字,並且sql無法更改,因此您需要'覆蓋''PLAN'關鍵字。這是否準確? – misterManager

+0

授予您不能更改SQL,那麼*可以*更改哪些內容? – RBarryYoung

回答

1

您可以嘗試使用十六進制編輯器編輯第三方應用程序。如果你發現字符串PLAN,編輯這個像PPAN的東西,然後重命名錶,視圖等。如果你抓住了所有,它可以工作。但是,這當然是件醜陋的事情。

0

我懷疑你被弄溼了。你可以

  • 線了第三方應用程序來使用linked tables墊片MS Access數據庫,在Access表不過是傳遞到底層SQL Server表。你想要做的是:

    • 更改SQL Server架構中的有問題的列名稱。
    • 在Access中創建鏈接表
    • 在訪問中創建一組與第三方應用程序所期望的模式相同的查看/查詢。


    這樣做後,第三方應用程序應該能夠像它一直說的「訪問SQL」。 Access負責處理T-SQL的「翻譯」。生活很好。我懷疑你會採取一些性能打擊,因爲你通過Access代理所有的東西,但我認爲它不會很大。

    這將是我的首選解決方案。

  • 另一種選擇是編寫一個實現ODBC API的「shim」DLL,並簡單地將實際調用包裝爲真正的ODBC驅動程序。然後在調用封裝的DLL方法之前捕獲請求並根據需要改進它們。棘手的部分是,你的第三方應用程序可能會按照序號排列,或者可能會按列名追蹤它們。或混合。這意味着您可能需要在返回時轉換列名,這可能比看起來更困難。