日期:2014-05-17  浏览次数:20738 次

请问这个CASE应用有没有问题
update table set

qzj.kaigong_cs   = (
case when src.KAIGONG_CS>qzj.kaigong_cs then src.KAIGONG_CS 
when qzj.kaigong_cs IS NULL then src.KAIGONG_CS 
when qzj.kaigong_cs=' ' THEN src.KAIGONG_CS  
else qzj.kaigong_cs 
end)
------解决方案--------------------
你这些别名是怎么来的就不得而知了,case when then when then else end 语法是这样的,但是is null和 =''就是一回事了
------解决方案--------------------

--这是楼主你的SQL
update table set  
qzj.kaigong_cs   = (
case when src.KAIGONG_CS>qzj.kaigong_cs then src.KAIGONG_CS 
when qzj.kaigong_cs IS NULL then src.KAIGONG_CS 
when qzj.kaigong_cs=' ' THEN src.KAIGONG_CS  
else qzj.kaigong_cs 
end)
--qzj和src 这些别名是从哪里来的?这个语句是执行不了的。
--假如你的更新的table别名为qzj 但是src有事从哪里来的。
--楼上说的is null和=''是同一回事是错误的理解。null不属于任何值,不能和其他任何比较。

--类似于以下sql是完全没有问题的:
update table_simo 
set name = (
case when id > 200 then 'name_'
else name end
)
--问题主要是你的别名


------解决方案--------------------
是两表关联更新吧?src里只有1条记录?多条的话肯定报错的,1条的话改写法