2013-07-26 38 views
0

我剛剛將SQL Server數據庫從2000年升級到2005年,兼容模式爲90,現在我發現我有一些使用非ANSI連接運算符的查詢,這些運算符在SQL Server中不完全受支持因此我需要將以下代碼轉換爲符合ANSI標準的表單。轉換非ANSI連接運算符

FROM gaf (nolock), 
    gaf_dress as D (nolock index = pkgaf_DRESS_GUM), 
    gaf_dress as M (nolock index = pkgaf_DRESS_GUM), 
    mobile (nolock index = pkmobileID), 
    Quest (nolock index = pkQuestID) 

WHERE 
gaf.ID = mobile.ID 
and gaf.DRESS_GUM_1 *= D.DRESS_GUM 
and gaf.DRESS_GUM_2 *= M.DRESS_GUM 
and gaf.ID *= Quest.ID 
and gaf.RECORD=1 
and na2.PURPOSE <> 'Doore' 
and gaf.PD_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, convert(varchar(6), 
getdate(), 112) + '01'))) 

任何幫助將不勝感激。

我想這一個前

FROM Name (nolock)inner join mobile 
on Name.ID = Demographics.ID left outer join NA1 
on Name.ADDRESS_NUM_1 = NA1.ADDRESS_NUM left outer join NA2 
on Name.ADDRESS_NUM_2 = NA2.ADDRESS_NUM left outer join ACSW 
on Name.ID = ACSW.ID 
;with Name_Address (nolock,(index(pkName_AddressADDRESS_NUM)))as NA1 
;with Name_Address (nolock, (index(pkName_AddressADDRESS_NUM))as NA2 ;with mobile(nolock, 
(index (pkmobileID)) 
;with ACSW (nolock, (index (pkACSWID))) 
WHERE gaf.MEMBER_RECORD=1 
and na2.PURPOSE <> 'MAIN' 
and gaf.PAID_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, 
convert(varchar(6), getdate(), 112) + '01'))) 

但它扔我這個錯誤「消息102,級別15,狀態1,行302 附近有語法錯誤('。」

+1

「 * ='意思是左外連接,如果我記得正確 –

+0

它絕對適用於SQL 2k,但不適用於SQL 2k5 – RASTASQL

+0

我以前試過這個,但是它給我帶來這個錯誤「Msg 102,Level 15,State 1,Line 302 '(')附近的語法錯誤。 – RASTASQL

回答

4
FROM gaf 
INNER JOIN mobile ON gaf.ID = mobile.ID 
LEFT JOIN gaf_dress as D ON and gaf.DRESS_GUM_1 = D.DRESS_GUM 
LEFT JOIN gaf_dress as M ON gaf.DRESS_GUM_2 = M.DRESS_GUM AND M.PURPOSE <> 'Doore' 
LEFT JOIN Quest ON gaf.ID = Quest.ID 

WHERE gaf.RECORD=1 
    AND gaf.PD_THRU > dateadd(dd, -1, dateadd(mm, -13, convert(datetime, convert(varchar(6), 
getdate(), 112) + '01'))) 
+0

WOW抱歉NA2代表對於M – RASTASQL

+0

WHERE gaf.ID = mobile.ID ---是,應轉換爲內部聯接? – RASTASQL

+0

是的,= INNER,* =左,= *右 - 如果na2是M,那麼它也移動到JOIN條件 –