[英]Convert TSQL to MS-Access SQL
TSQL(在MS SQL Server 2000和2005中使用)允許多個JOIN子句,一個接一個,不需要逗號或括號。 在Access中嘗試這個並且它會拋出一個擬合:“查詢表達式中的語法錯誤(缺少運算符)......”
從我在Google-land中收集到的內容來看,Access SQL希望使用括號對JOIN子句進行分組。 關於如何實現這一點的大多數建議是使用設計視圖或查詢向導,並讓Access找出放置括號的位置(標准SQL中不需要)。 問題是,我習慣於在文本編輯器(記事本,SSMS,VS2005,無論如何)中執行我的SQL,設計視圖和向導會妨礙我的皮膚爬行。 有時,如果有多種可能性,向導會對加入的內容做出錯誤的假設,並且我很習慣在TSQL中自己做這件事,我寧願讓向導離開它。
是不是有一個工具可以將TSQL轉換為Access SQL,或者至少有一套規則來放置括號?
例:
SELECT ...
FROM Participant PAR
INNER JOIN Individual IND
ON PAR.APETSID = IND.APETSID
INNER JOIN Ethnicity ETH
ON IND.EthnicityID = ETH.ID
INNER JOIN Education EDU
ON IND.EducationID = EDU.ID
INNER JOIN Marital MAR
ON IND.Marital = MAR.ID
INNER JOIN Participant-Probation PXP
ON PAR.ID = PXP.ParticipantID
INNER JOIN Probation PBN
ON PXP.ProbationID = PBN.ID
INNER JOIN Class-Participant CXP
ON PAR.ID = CXP.ParticipantID
INNER JOIN Class CLS
ON CXP.ClassID = CLS.ID
INNER JOIN Official OFR
ON PAR.ReferringPO = OFR.ID
INNER JOIN Participant-Official PXO
ON PAR.ID = PXO.ParticipantID
INNER JOIN Official OFA
ON PXO.OfficialID = OFA.ID
是的,MS-Access是愚蠢的。
我認為不存在(從MS-SQL / TSQL到MS-Access可能不是一個巨大的市場)。 通常,我使用的設計視圖就我而言並不是真正的向導。 然后我手動添加表格,然后(如果我沒有創建正確的關系圖表,或者某些東西有點時髦)在Designer中手動創建關系。 之后,我在SQL視圖中檢查查詢並根據需要進行更正。
對於您的示例(如您所示),您可能需要括號,並且必須手動添加它們。 你可能想要這樣的東西:
SELECT ...
FROM (((Participant PAR
INNER JOIN Individual IND
ON PAR.APETSID = IND.APETSID)
INNER JOIN Ethnicity ETH
ON IND.EthnicityID = ETH.ID)
INNER JOIN Education EDU
ON IND.EducationID = EDU.ID)
INNER JOIN Marital MAR
ON IND.Marital = MAR.ID
(如果你有N個內連接,你將在開頭需要N-1個左括號,並且在連接的前端需要一個;不包括最后一個)
這適用於Access。
SELECT *
FROM (((Individual AS IND
INNER JOIN Ethnicity AS ETH
ON IND.EthnicityID = ETH.ID)
INNER JOIN Education AS EDU
ON IND.EducationID = EDU.ID)
INNER JOIN Marital AS MAR
ON IND.Marital = MAR.ID)
INNER JOIN (((((((Participant AS PAR
INNER JOIN Official AS OFR
ON PAR.ReferringPO = OFR.ID)
INNER JOIN [Class-Participant] AS CXP
ON PAR.ID = CXP.ParticipantID)
INNER JOIN Class AS CLS
ON CXP.ClassID = CLS.ID)
INNER JOIN [Participant-Official] AS PXO
ON PAR.ID = PXO.ParticipantID)
INNER JOIN Official AS OFA
ON PXO.OfficialID = OFA.ID)
INNER JOIN [Participant-Probation] AS PXP
ON PAR.ID = PXP.ParticipantID)
INNER JOIN Probation AS PBN
ON PXP.ProbationID = PBN.ID)
ON IND.APETSID = PAR.APETSID
如您所見,要連接的表組合在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.