首页 新闻 赞助 找找看

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

0
悬赏园豆:10 [已解决问题] 解决于 2010-09-02 15:35

select  DATEDIFF(year,hire_date,getdate()) as '工龄(年)'  from Employee
/*1.更新工资总数不超标的*/
update Employee  set job_lvl=job_lvl*(1+(YEAR (GETDATE() - hire_date)- 1900 ))
where exists(
select Max_lvl from Jobs where job_id=[Employee].job_id and Max_lvl<=
(
[Employee].job_lvl*(1+DATEDIFF(year,[Employee].hire_date,getdate()))
)
    )
/*2.更新工资总数超标的*/
update Employee  set job_lvl=(select Max_lvl from Jobs where job_id=[Employee].job_id) where exists(select Max_lvl from Jobs where job_id=[Employee].job_id and Max_lvl>job_lvl*(1+DATEDIFF(year,[Employee].hire_date,getdate())))

 


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

%%%说明下%%%      把 表employee  中的 列job_lv1  的  tingint 的数据类型改成 int 型还是出现数据溢出错误。

sj3136456的主页 sj3136456 | 初学一级 | 园豆:35
提问于:2010-08-30 15:28
< >
分享
最佳答案
0

所有跟钱有关系的字段最好是设置成 Decimal(M,N);M 表示长度、N 表示小数点位数,如Decimal(18,2)、Decimal(18,6)

收获园豆:10
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-08-30 15:57
还是这么个记过 (40 行受影响) 消息 220,级别 16,状态 2,第 4 行 发生数据类型 tinyint 的算术溢出错误,值 = 2000。 语句已终止。 (0 行受影响)
sj3136456 | 园豆:35 (初学一级) | 2010-08-30 16:01
其他回答(1)
0

看不出来哪里有错误,有如楼上兄弟所说工资不该是int类型的,一般都会有小数的.

changbluesky | 园豆:854 (小虾三级) | 2010-08-31 09:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册