常见 table 表达式语法错误

Common table expression incorrect syntax

我正在尝试执行此 CTE,但它说存在我无法找到的语法错误。

Msg 102, Level 15, State 1, Line 21 Incorrect syntax near ')'.

任何人都可以发现我无法发现的东西吗?

    ;with sqltmp  (   
     eohdr_ouinstance, eohdr_eo_no,   eohdr_rev_no,  
     eohdr_engdoctype, eohdr_src_doc_type,  eohdr_mcm_no,  
     eoae_ac_reg_no,  eoae_applicability_grp, eopse_part_no,  
     eopse_serial_no, eopse_component_id,  maint_obj,  
     maint_obj_type,  trans_status,   pre_comp_date,  
     jobtype,   exec_doc_no)  
   AS (  
   SELECT eohdr_ouinstance, eohdr_eo_no,   eohdr_rev_no,  
     eohdr_engdoctype, eohdr_src_doc_type,  eohdr_mcm_no,  
     eoae_ac_reg_no,  eoae_applicability_grp, NULL,   
     NULL,    NULL,     eoae_ac_reg_no,  
     'A',    eoae_applicable,  eoae_precompdate,  
     'AC',    eoae_precompdoc  
   FROM eo_eohdr_eo_header  WITHa (NOLOCK)  
   JOIN eo_eoae_eo_ac_effect  WITH (NOLOCK)     
   ON  eohdr_ouinstance    = eoae_ouinstance  
   AND  eohdr_eo_no      = eoae_eo_no  
   AND  eohdr_rev_no     = eoae_rev_no  
   AND  eoae_applicable     IN  ('N', 'PCW')  
   AND  ISNULL(eohdr_cr_no, '##')  =  '##'  
     
   UNION  
   SELECT eohdr_ouinstance,  eohdr_eo_no,    eohdr_rev_no,  
     eohdr_engdoctype,  eohdr_src_doc_type,   eohdr_mcm_no,  
     NULL,     eopse_applicability_grp, eopse_part_no,  
     eopse_serial_no,  eopse_component_id,   eopse_component_id,  
     'C',     eopse_applicable,   eopse_precompdate,  
     CASE WHEN eohdr_instiu_flag = 'Y' THEN 'ON' ELSE 'OFWG' END,  
     eopse_precompdoc  
   FROM eo_eohdr_eo_header  WITH (NOLOCK)  
   JOIN eo_eopse_eo_part_serial_effect  WITH (NOLOCK)    
   ON  eohdr_ouinstance    = eopse_ouinstance  
   AND  eohdr_eo_no      = eopse_eo_no  
   AND  eohdr_rev_no     = eopse_rev_no  
   AND  eopse_applicable    IN  ('N', 'PCW')  
   AND  ISNULL(eohdr_cr_no,'##')  =  '##')  

语法似乎没问题。当您在 cte 定义后添加 SELECT 时,它解析得很好:

 ;with sqltmp  (   
     eohdr_ouinstance, eohdr_eo_no,   eohdr_rev_no,  
     eohdr_engdoctype, eohdr_src_doc_type,  eohdr_mcm_no,  
     eoae_ac_reg_no,  eoae_applicability_grp, eopse_part_no,  
     eopse_serial_no, eopse_component_id,  maint_obj,  
     maint_obj_type,  trans_status,   pre_comp_date,  
     jobtype,   exec_doc_no)  
   AS (  
   SELECT eohdr_ouinstance, eohdr_eo_no,   eohdr_rev_no,  
     eohdr_engdoctype, eohdr_src_doc_type,  eohdr_mcm_no,  
     eoae_ac_reg_no,  eoae_applicability_grp, NULL,   
     NULL,    NULL,     eoae_ac_reg_no,  
     'A',    eoae_applicable,  eoae_precompdate,  
     'AC',    eoae_precompdoc  
   FROM eo_eohdr_eo_header  WITHa (NOLOCK)  
   JOIN eo_eoae_eo_ac_effect  WITH (NOLOCK)     
   ON  eohdr_ouinstance    = eoae_ouinstance  
   AND  eohdr_eo_no      = eoae_eo_no  
   AND  eohdr_rev_no     = eoae_rev_no  
   AND  eoae_applicable     IN  ('N', 'PCW')  
   AND  ISNULL(eohdr_cr_no, '##')  =  '##'  
     
   UNION  



   SELECT eohdr_ouinstance,  eohdr_eo_no,    eohdr_rev_no,  
     eohdr_engdoctype,  eohdr_src_doc_type,   eohdr_mcm_no,  
     NULL,     eopse_applicability_grp, eopse_part_no,  
     eopse_serial_no,  eopse_component_id,   eopse_component_id,  
     'C',     eopse_applicable,   eopse_precompdate,  
     CASE WHEN eohdr_instiu_flag = 'Y' THEN 'ON' ELSE 'OFWG' END,  
     eopse_precompdoc  
   FROM eo_eohdr_eo_header  WITH (NOLOCK)  
   JOIN eo_eopse_eo_part_serial_effect  WITH (NOLOCK)    
   ON  eohdr_ouinstance    = eopse_ouinstance  
   AND  eohdr_eo_no      = eopse_eo_no  
   AND  eohdr_rev_no     = eopse_rev_no  
   AND  eopse_applicable    IN  ('N', 'PCW')  
   AND  ISNULL(eohdr_cr_no,'##')  =  '##'
   )  

   SELECT 1
   from sqltmp