2010-08-19 6 views
0

Я выдача Заявления UPDATE для таблицы Sybase, но я получаю ошибку ниже:Ошибка при обновлении таблицы в Sybase

Msg 325, Level 18, State 4: Server 'dev', Line 1: Adaptive Server finds no legal query plan for this statement. If an Abstract Plan is forcing the query plan, check its correspondence to the query. If not, please contact Sybase Technical Support.

Вот мой UPDATE заявление.

Update TABLE1 SET SAMPLECOL = (
    Select 
    TABLE2.SAMPLECOL 
    from TABLE2 
    where 
    TABLE2.COMMON_ID = TABLE1.COMMON_ID 
) 
where 
TABLE1.TABLE1_ID in (
    Select 
    TABLE1.TABLE1_ID 
    from TABLE1 
    inner join TABLE2 
    on TABLE1.COMMON_ID = TABLE2.COMMON_ID 
    where TABLE1.SAMPLECOL = '' 
) 

Любое понимание будет принята с благодарностью.

ответ

1

Я ДУМАЮ, проблема заключается в том, что вы устанавливаете столбец SAMPLECOL с чем-то, что может возвращать несколько значений. Попробуйте сделать это и опубликовать результат назад здесь:

Update TABLE1 SET SAMPLECOL = (
    set rowcount 1 
    Select 
    TABLE2.SAMPLECOL 
    from TABLE2 
    where 
    TABLE2.COMMON_ID = TABLE1.COMMON_ID 
    set rowcount 0 
) 

(это будет выбрать только одну запись строки и логика может не срабатывать на этой основе, однако, насколько ошибки вы получаете, я уверен, связан с это). Повторите попытку и сообщите нам об итогах.

+1

Это было бы моим предположением. (Кроме того, я думаю, вы имеете в виду несколько значений, а не столбцы?) Я также предложил бы запустить запрос, измененный как SELECT, а не UPDATE, чтобы увидеть, какие данные возвращаются. Это покажет, возвращал ли подзапрос нескаляр. –

+0

Вы правы «несколько значений», исправлены - Спасибо! – VoodooChild

+0

Привет, Когда я использовал выше заявление, я получил сообщение об ошибке Msg 156, Level 15, State 2: 'Dev' сервер, Line 1: Неправильный синтаксис около ключевого слова 'верхний'. –

0

попробуйте вместо этого;

update TABLE1 
    set SAMPLECOL = T2.SAMPLECOL 
    from TABLE1 T1, TABLE2 T2 
where T1.COMMON = T2.COMMON 
    and isnull(T1.SAMPLECOL, '') = ''