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