2011-03-15 76 views
0

我們有大約150個使用* =和= *類型ANSI92的舊式查詢和視圖?加入。 是否有人知道可以幫助轉換的工具/方法或腳本,或者我們是否只需要通過其中的150個就可以了。T-SQL舊式連接* =和= *

感謝

Select PapersSent, 
DateSent, 
Code, 
ActionDate, 
ClientAction, 
ClientContactRef, 
PublishAppraisal, 
PublishCV, 
SponsorContactREF, 
MeetingNotes, 
InternalNotes, 
Contact_AdminAction, 
MeetingLocation 
from tblMeetingNotes a, 
    tblPapersOptions b, 
    tblContactLog c 

where [email protected] and 
    [email protected] AND 
    Isnull(PapersSent,0)*=Value AND 
    a.CREF*=c.CREF AND 
    a.CLID*=c.Contact_ID 
+5

「ANSI92?join」\ * =和= \ *不是ANSI 92. ANSI SQL 92引入了像內連接和左外連接這樣的冗長連接語法。 – 2011-03-15 17:27:23

+2

您需要轉換它們的任何特殊原因?爲什麼不直接離開它們呢? – Ben 2011-03-19 13:49:34

+0

@Ben - 語法已被棄用,並根據這個答案[並不總是返回正確的結果](http://stackoverflow.com/questions/983862/sql-server-operator/983955#983955)。 – 2011-03-21 18:29:59

回答

2

這可能不是你所希望看到什麼聽到,但這種類型的工具不存在。在某些情況下,舊式JOIN不會乾淨地轉換爲SQL-92樣式,導致查詢給出不同的結果,甚至需要重新編寫查詢。

即使有自動轉換連接的工具,您仍然需要測試每個查詢以確保將其轉換爲您想要的方式,創建的操作可能與執行此操作時的操作一樣多用手。

厄蘭Sommarskog對你將如何快速轉換舊風格加入到SQL-92很好的一步一步的過程:http://www.sommarskog.se/Become-an-ANSI-star.doc

0

你可以腳本的數據庫,並使用搜索和替換改變大頭他們手動檢查更困難的情況。正如mfredrickson指出的那樣,確保在輸出發生變化的情況下徹底測試所有查詢。

爲幫助您進行搜索,儘管如果您編寫數據庫腳本不是絕對必要的,請下載Redgate's SQL Search(它是免費的)以幫助您找到所有實例。即使你不用它來完成這個任務,它也很方便。

1

在進行轉換之前,我一定會看到有關設置某種測試框架的信息,以便您可以比較結果。

如果所有這些都是視圖,或者如果可以將輸出獲取到表格中,這將是最簡單的。

此時,您可以使用EXCEPT之類的內容來確保所有行匹配。

在過去,我使用存儲過程來生成表格比較,存儲過程採用表格/視圖並生成比較。甚至包括數量差異的百分比閾值,其中一組有四捨五入的問題 - 比如銀行家舍入(Teradata)或IEEE基於浮點數的舍入(WebFocus)。