Неправильный синтаксис общего табличного выражения - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь выполнить этот CTE, но он говорит, что есть синтаксическая ошибка, которую я не могу найти.

Сообщение 102, уровень 15, состояние 1, строка 21 Неправильный синтаксис рядом с ' ) '.

Кто-нибудь, пожалуйста, заметьте что-нибудь, чего я не могу?

    ;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,'##')  =  '##')  

1 Ответ

0 голосов
/ 14 июля 2020

Синтаксис в порядке. Когда вы добавляете SELECT после определения cte, он отлично разбирается:

 ;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
...