2010-06-23 2 views
0

я получаю сообщение об ошибке, как показано ниже:с ошибкой AS в SQL

Msg 156, Level 15, State 1, Procedure Sp_Table1, Line 22 
Incorrect syntax near the keyword 'AS'. 

при выполнении этого SQL:

WITH myCTE AS 
(Select mci.* from 
view_name AS si 
JOIN merch_catalog_ipt_view_name AS mci 
    ON mci.view_id = si.view_id 
    AND mci.resolved_view_name_id = si.view_name_id 
    AND mci.ctg_ipt_event_id = @ctg_ipt_event_id 
    AND mci.accept_flag = 'y') 

UPDATE view_name 
SET name = (select mci.name from myCTE where myCTE.view_id = view_id) 
,view_name_ctg_id = (select mci.resolved_view_name_ctg_id from myCTE where myCTE.view_id = view_id) 
,xref_value = (select mci.xref_value from myCTE where myCTE.view_id = view_id) 
,availability_start_date = (select mci.availability_start_date from myCTE where myCTE.view_id = view_id) 
,availability_end_date = (select mci.availability_end_date from myCTE where myCTE.view_id = view_id) 
,status_code = (select mci.status_code from myCTE where myCTE.view_id = view_id) 
,last_modified_user_id = (select CASE WHEN mci.last_modified_user_id = 42 THEN @posting_user_id ELSE mci.last_modified_user_id END from myCTE where myCTE.view_id = view_id) 
,last_modified_timestamp = CURRENT_TIMESTAMP 
WHERE si.shi_flag = 'n' 
and exists (select view_id from merch_catalog_ipt_view_name AS mci 
    Where mci.view_id = view_name.view_id 
    AND mci.resolved_view_name_id = view_name.view_name_id 
    AND mci.ctg_ipt_event_id = @ctg_ipt_event_id 
    AND mci.accept_flag = 'y') 

Пожалуйста, помогите

ответ

4

Попробуйте положить точку с запятой ; непосредственно перед WITH, as

Когда CTE используется в инструкции, которая является частью пакета, перед выполнением перед ней должна следовать точка с запятой.

Это уловило меня в прошлом.

+0

Теперь я получаю эту ошибку. Исправлена ​​ошибка: Идентификатор из нескольких частей «si.shi_flag» не может быть связан. – SmartestVEGA

+1

@SmartestVEGA ok, так что теперь по крайней мере это * синтаксически * правильно. Проблема, с которой вы столкнулись сейчас, состоит в том, что 'si' как имя имеет смысл * внутри * CTE - у основного запроса нет ничего по этому имени. Я не уверен, должен ли этот критерий быть в определении CTE в каждом подзапросе (или что-то еще) ... – AakashM

+0

Не могли бы вы изменить запрос? – SmartestVEGA

Смежные вопросы