首页 新闻 会员 周边

SQL;数据操作;根据员工工龄给员工涨工资,1年工龄增加1个job_lvl,但不能超过该职位的最高level

0
悬赏园豆:30 [已解决问题] 解决于 2010-08-27 11:55

select * from jobs
Update Employee Set job_lvl=job_lvl+(Datepart(yyyy,Getdate())-Datepart(yyyy,hire_date))
Update Employee Set job_lvl=(Select Max_lvl From Jobs Where Jobs.job_id=Employee.job_id) Where Employee.job_lvl>(Select Max_lvl From Jobs Where Jobs.job_id=Employee.job_id)


(15 行受影响)
消息 220,级别 16,状态 2,第 2 行
发生数据类型 tinyint 的算术溢出错误,值 = 266。
语句已终止。

(0 行受影响)

小弟才出学SQL ,在这个问题上纠结了好几天, 有哪位大哥看到请帮我解决下· ,如果有更好的实现问题标题的,也在楼下给我顶起哈·在线等, 如果还有不清晰的地方 加我Q 196536910

问题补充: nyint 从 0 到 255 的整型数据。存储大小为 1 字节。 说明你超出这个范围了 我 把 job_id job_lvl 数据类型改成 int 还是报错
sj3136456的主页 sj3136456 | 初学一级 | 园豆:35
提问于:2010-08-27 10:49
< >
分享
最佳答案
0

tinyint

从 0 到 255 的整型数据。存储大小为 1 字节。

说明你超出这个范围了

收获园豆:30
jowo | 老鸟四级 |园豆:2834 | 2010-08-27 10:50
结构改下,改成INT型
jowo | 园豆:2834 (老鸟四级) | 2010-08-27 10:54
int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
jowo | 园豆:2834 (老鸟四级) | 2010-08-27 10:57
@jowo: 可以加Q么·~?大哥·我在呢问题纠结好久了
sj3136456 | 园豆:35 (初学一级) | 2010-08-27 11:00
其他回答(1)
0

其实你这里要做的就是给Employee表增加job_lvl 而已,算工资根据是另外的事.

代码
update Employee
set job_lvl=case when (year(getdate())-year(hire_date))>(Select Max_lvl From Jobs Where Jobs.job_id=Employee.job_id) then (Select Max_lvl From Jobs Where Jobs.job_id=Employee.job_id) else year(getdate())-year(hire_date) end

 

回头看你的设计,应该不用操作你这步的,在计算工资的时候直接根据计算式就可以得到job_lvl了。不用专门用个字段记录。

清海扬波 | 园豆:825 (小虾三级) | 2010-08-27 11:53
大哥你好· 你的意思也是对的· 谢谢你的回答,如果觉得今后让小弟向你学习的话麻烦大哥你加我Q
支持(0) 反对(0) sj3136456 | 园豆:35 (初学一级) | 2010-08-27 12:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册