2014-12-05 71 views
0

我們的數據庫位於SQL Server 2000上。我們正在遷移到SQL Server 2008 R2。在服務器上執行之前處理SQL語句

我們要更新的兼容級別爲100

但連接操作*==*沒有更多與兼容級別的支持。

建議的解決方案是更新我們的源代碼並將操作員更改爲OUTER JOIN

但是我們不能承受千exe和dll的修改。所以我們無法更新我們的源代碼;有太多的項目。

我的問題是:

有沒有在SQL Server 2008 R2的任何系統,這將讓我:

  1. 捕獲的SQL語句是執行
  2. 更新語句(如更換前*= by LEFT OUTER JOIN
  3. 將修改後的語句返回給SQL Server引擎執行

這種方法將允許我們設置兼容級別設置爲100,即使我們的方案仍然使用舊的語法

感謝

(附:這個問題一直是橫貼在dba.stackexchange

+1

即使這種伎倆是可能的,我絕對建議不要這樣做!我向你保證,這是一個可怕的方法,從長遠來看不會有幫助。 – jazzytomato 2014-12-05 16:43:27

+0

我知道這一點。如果技巧存在,我們只會將它用於舊項目。不是新的。 – podosta 2014-12-05 16:45:47

+1

'建議的解決方案是更新我們的源代碼並將操作員更改爲OUTER JOINS' - 聽起來像是很好的建議。它可能比嘗試去做你所要求的更快,更不容易出錯。 – Donal 2014-12-05 16:57:11

回答

1

號這需要不存在兩件事情:

  1. 一種近乎一個INSTEAD OF觸發器選擇

  2. 1000個可計費小時(或更多,取決於您和/或您的團隊在QA方面的表現如何),以獲得文本解析/正則表達式/等所需的全部語法變體,以便捕獲查詢中允許的所有語法變體:block com在值中間的內容,最後的內聯註釋,分成多行的條件,表別名,內連接表的外連接等等。

您將實際花費時間更新你的源代碼(如其他人所說),甚至跨越「千個EXE和DLL」,比你想實現這一點,然後花你的餘生調試它,並接受最終導致錯誤導致的問題的支持調​​用。

(附註:這個答案已經交叉張貼在DBA.StackExchange,但還有更多的細節)

UPDATE

我提交了Microsoft連接建議爲這種能力:Intercept query batch from client to rewrite it or cancel it