簡體   English   中英

將TSQL轉換為MS-Access SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM