簡體   English   中英

在關鍵字“ WHERE”附近查找語法錯誤的原因

[英]Finding the cause of Incorrect syntax near the keyword 'WHERE'

我從SQL Server中收到以下錯誤:

消息156,級別15,狀態1,關鍵字“ WHERE”附近的語法錯誤。

SELECT DISTINCT
       cpt.Cpt_id AS ID_Entreprise,
       enta.entApp,
       enta.entJuri,
       cli.RaisocA,
       cli.RaisocB,
       cli.AdresA,
       cli.AdresB,
       cli.Cpostal,
       cli.Burdist,
       ins.Site_id,
       ins.Inscrip_id,
       '' AS CdGraReg,
       '' AS CaisseSS,
       '' AS CentreSS,
       cpt.Login,
       cli.RaisocB AS Raisoc,
       ct.Entappcr,
       ct.Cont,
       ct.Souscont,
       ct.Sptf,
       ctcb.Socuti,
       (CASE
             WHEN ct.typepdt = 'R' THEN (CASE WHEN (ctcb.entjuriais IS NULL OR ctcb.entjuriais = '') THEN 'E' ELSE 'R' END)
             ELSE ct.typepdt
        END) AS typepdt,
       ct.Scont,
       ct.Siret,
       ctcb.Datefcb,
       ctcb.Dtfineffcb,
       ctcb.Stacb,
       ctcb.Libstacb,
       ctcb.Perap,
       ctcb.Libperap,
       ctcb.Deremis,
       ctcb.Derregl,
       ISNULL(EntTPG.EntiteTPG, '') AS EntiteTPG,
       CASE ct.Typepdt
            WHEN 'R' THEN CASE ISNULL(RegRet.Reg, 0)WHEN 0 THEN 0 ELSE 1 END
            WHEN 'I' THEN CASE ISNULL(RegIFC.Reg, 0)WHEN 0 THEN 0 ELSE 1 END
            ELSE 0
       END AS UC,
       CASE ct.Typepdt
            WHEN 'R' THEN CASE ISNULL(RegRet.Reg, 0)WHEN 0 THEN 0 ELSE RegRet.isArt39 END
            ELSE 0
       END AS Art39,
       ctcb.Cb,
       ctcb.Cnt_bo_ve_actif,
       ct.Sta,
       ct.Libsta,
       ct.Dateff,
       ctcb.Date_hors_infocentre AS Date_hors_infocentre_CtCb,
       CASE WHEN RegMens.reg IS NULL THEN 0 ELSE 1 END AS mensualisation,
       CASE WHEN RegRep.reg IS NULL THEN 0 ELSE 1 END AS repartition,
       CASE WHEN RegOptFin.reg IS NULL THEN 0 ELSE 1 END AS optFin,
       ctcb.Socuti,
       ctcb.Libcb,
       (CASE ct.typepdt
             WHEN 'S' THEN '1'
             WHEN 'P' THEN '2'
             WHEN 'R' THEN '3'
             WHEN 'I' THEN '4'
             ELSE '5'
        END) AS orderParam,
       ct.Reg,
       ctcb.Cnt_bo_affil_sal,
       ctcb.Cnt_bo_affil_sal AS affilSalEnabled,
       ct.Siret,
       ISNULL(ctcb.AtOperationnel, 'N') AS AtOperationnel,
       ctcb.Formule,
       ctcb.FormuleSocle,
       ctcb.Srs,
       ctcb.Libstacb_vision_C,
       ct.DATENVOI,
       ct.DATREGUL,
       ct.DATPA,
       ctcb.Cnt_bo_vs_actif,
       ctcb.Vision AS Vision_Ctcb,
       ct.Vision AS Vision_Ct,
       ctcb.Valide AS Valide_Ctcb,
       ctcb.Valide_C,
       ct.ent_opt_set,
       ctcb.Cntcb_actif,
       ct.Cnt_actif,
       ctcb.Cntcb_actif,
       ct.CodeICX,
       ct.AppLeader
FROM  dbo.Inscription_site ins INNER JOIN
      dbo.Clients cli ON cli.Siret = ins.Siret INNER JOIN
      dbo.Comptes_cli cpt ON cpt.Inscrip_id = ins.Inscrip_id INNER JOIN
      dbo.ENTAPP enta ON enta.entApp = ins.Entappcr INNER JOIN
      dbo.Contratscb ctcb INNER JOIN
      dbo.Contrats ct ON ctcb.Scont = ct.Scont AND ctcb.Siret = ct.Siret LEFT OUTER JOIN
      dbo.Asso_SocUti_ENTTPG EntTPG ON EntTPG.Socuti = ctcb.Socuti LEFT OUTER JOIN
      dbo.Regime_IdentificationContratsRetraiteUC RegRet ON RegRet.Reg = ct.Reg LEFT OUTER JOIN
      dbo.Regime_IdentificationContratsIFCUC RegIFC ON RegIFC.Reg = ct.Reg LEFT OUTER JOIN
      dbo.Regime_Mensualisation RegMens ON RegMens.Reg = ct.Reg LEFT OUTER JOIN
      dbo.Regime_Repartition RegRep ON RegRep.Reg = ct.Reg LEFT OUTER JOIN
      dbo.Regime_OptionFinanciere RegOptFin ON RegOptFin.Reg = ct.Reg LEFT OUTER JOIN
      dbo.Regime_ERE RegERE ON RegERE.Reg = ct.Reg
WHERE (ctcb.Stacb NOT IN ('30', '31', '35', '39')) AND (ct.Sta <> '30')

下划線“哪里”,但我不知道為什么

缺少on子句:

INNER JOIN
      dbo.Contratscb ctcb INNER JOIN

解析器通常會向您提供錯誤消息,但它們並不完美。 有時,他們無法向您確切顯示語法錯誤的位置,而是報告存在解析錯誤的塊的末尾。

在您的情況下,當解析器到達WHERE部分時,它意識到它前面的塊有錯誤並報告該位置。

錯誤是您忘記了使用ON子句將INNER JOIN限定為dbo.Contratscb ctcb

....
dbo.Comptes_cli cpt ON cpt.Inscrip_id = ins.Inscrip_id INNER JOIN
dbo.ENTAPP enta ON enta.entApp = ins.Entappcr INNER JOIN
dbo.Contratscb ctcb INNER JOIN <-- should be an ON here
dbo.Contrats ct ON ctcb.Scont = ct.Scont AND ctcb.Siret = ct.Siret LEFT OUTER JOIN
dbo.Asso_SocUti_ENTTPG EntTPG ON EntTPG.Socuti = ctcb.Socuti LEFT OUTER JOIN
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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