Форум.
Я работаю с IBM System i версии 7.1.
Я столкнулся с проблемой при обновлении более чем одного столбца в операторе слияния.
Следующий оператор работает при установке одного столбца:
merge into database.table as t
using ( values(
cast(99 as smallint)
,cast('dave' as varchar(40))
))
as caz(
group_id
, group_name
)
on t.group_id = caz.group_id
when matched then update
set t.group_name = caz.group_name
when not matched then
insert (
group_id
, group_name
)
values (
caz.group_id
, caz.group_name
);
Тот же оператор больше не работает, когда я добавляю дополнительную строку набора:
merge into database.table as t
using ( values(
cast(99 as smallint)
,cast('dave' as varchar(40))
,cast(1 as smallint)
))
as caz(
group_id
, group_name
, queued_calls_above_tasa
)
on t.group_id = caz.group_id
when matched then update
set t.group_name = caz.group_name,
set t.queued_calls_above_tasa = caz.queued_calls_above_tasa
when not matched then
insert (
group_id
, group_name
, queued_calls_above_tasa
)
values (
caz.group_id
, caz.group_name
, caz.queued_calls_above_tasa
);
Я получаю следующее сообщение об ошибке:
слияние с database.table как t с использованием (values(cast(99 as smallint) ,cast('dave' as varchar(40)) ,cast(1 as smallint)) as caz(
group_id , group_name , queued_calls_above_tasa )
на t.group_id = caz.group_id при совпадении затем обновить набор t.group_name = caz.group_name, установить t.queued_calls_above_tasa = caz.queued_calls_above_tasa
если не совпадает, то вставить ( group_id , group_name , queued_calls_above_tasa )
значения ( caz.group_id , caz.group_name , caz.queued_calls_above_tasa )Состояние SQL: 42601
Код поставщика: -104
Сообщение: [SQL0104] Токен T недействителен. Действительные токены: =. Причина . . . . . : в токене T обнаружена синтаксическая ошибка. Токен T не является допустимым токеном. Частичный список допустимых токенов =. Этот список предполагает, что оператор верен с точностью до токена. Ошибка может быть раньше в операторе, но синтаксис оператора кажется действительным до этого момента. Восстановление . . . : Выполните одно или несколько из следующих действий и повторите запрос: -- Проверьте оператор SQL в области токена T. Исправьте оператор. Ошибка может быть связана с отсутствием запятой или кавычки, с ошибкой в слове или с порядком предложений. -- Если токен ошибки , исправьте оператор SQL, так как он не заканчивается допустимым предложением.Обработка завершена, так как выделенный оператор не завершился успешно
Любая помощь приветствуется.
Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.