我正在尝试比较两个smallint字段以寻找差异。一个表是挂起的更改表,在晚上由批处理作业读取,然后更新另一个表以及执行其他活动。批处理工作有一些问题,我正在研究这些问题。我想找到那些不同的值,并显示挂起表的值是什么时候。
给我带来麻烦的特定列(CO_FT_FREQ_DAY)在smallint字段中有空值,我认为这是我的问题的原因。 (或者它可能是待处理的添加,因此没有匹配的值可以与...比较)正如您所看到的,我已经尝试解决该问题,但它仍然无法正常工作。
在此之前我尝试了ifnull,但得到了同样的错误。我希望这能解决这个问题。
SELECT T342.clientID
,T342.TS_340
,case when (case when t342.CO_FT_FREQ_DAY is null then 0 else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then 0 else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else 0
end as CO_FT_FREQ_DAY
FROM database.PendingChangeTable T342
left outer join database.CurrentTable T340
on T340.ClientID = T342.ClientID
and T340.TS_PK = T342.TS_340
WHERE t342.clientID in (clientID list);
DSNT408I SQLCODE = -420,错误:一个有争议的论据的价值不是
可接受退役功能
DSNT418I SQLSTATE = 22018 SQLSTATE返回代码
答案 0 :(得分:2)
UGH发现了这个问题。设计表的人在中途切换并将这些新列定义为字段,我错过了。所以我需要在我的case语句中将值设置为'0'而不是0。
,case when (case when t342.CO_FT_FREQ_DAY is null then '0' else
t342.CO_FT_FREQ_DAY end) <>
(case when t340.CO_FT_FREQ_DAY is null then '0' else
t340.CO_FT_FREQ_DAY end)
then T342.CO_FT_FREQ_DAY
else '0'
end as CO_FT_FREQ_DAY
,case when ifnull(t342.CO_HT_FREQ_DAY,'0') <>
ifnull(t342.CO_HT_FREQ_DAY,'0')
then ifnull(T340.CO_HT_FREQ_DAY,'0')
else '0'
end as CO_HT_FREQ_DAY
因此,今天的教训是,当您收到此错误时,请务必检查您的数据类型!