【发布时间】:2016-01-12 17:27:11
【问题描述】:
论坛。
我正在使用 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
);
我收到以下错误消息:
使用 ( 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 语句,因为它没有结束 带有一个有效的子句。处理结束,因为突出显示的语句未完成 成功
感谢任何帮助。
如果我可以提供更多信息,请告诉我。
【问题讨论】:
-
不再工作是什么意思?您是否收到错误消息,或者您没有得到预期的结果?
-
谢谢你;我编辑了问题以包含我收到的错误消息详细信息。