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 型还是出现数据溢出错误。
所有跟钱有关系的字段最好是设置成 Decimal(M,N);M 表示长度、N 表示小数点位数,如Decimal(18,2)、Decimal(18,6)
看不出来哪里有错误,有如楼上兄弟所说工资不该是int类型的,一般都会有小数的.