创建一个存储过程,对程序员的工资进行分析,月薪在1500-10000不等,如果有一半的人薪水不到6000,则给所有人加薪,每次加100,再进行分析,知道有一半以上的人大于6000为止,存储过程执行完后,最终加了多少钱。
请写出正确代码,本人做下参考,真的是想可很久都想不出,拜托了..
不会的就别乱回答,上次被人乱回答,害得把我引上错误的道路....
创建一个存储过程,对程序员的工资进行分析,月薪在1500-10000不等,如果有一半的人薪水不到6000,则给所有人加薪,每次加100,再进行分析,知道有一半以上的人大于6000为止,存储过程执行完后,最终加了多少钱。
请写出正确代码,本人做下参考,真的是想可很久都想不出,拜托了..
不会的就别乱回答,上次被人乱回答,害得把我引上错误的道路....
create table [#t](id int, name char(10),sal int)
insert into #t
select 1,'alex',1500 union all
select 2,'kelly',5000 union all
select 3,'lily',10000 union all
select 4,'judy',6000 union all
select 5,'tom',5900 union all
select 6,'cherly',4000 union all
select 7,'cherly',3500 union all
select 8,'romeo',7000 union all
select 9,'frank',5500
select * from #t
go
if Exists(Select name From sysobjects Where name='add_sal' And type='P')
Drop Procedure add_sal
Go
create proc add_sal
as
begin
declare @count1 float,@count2 int,@up_sal int
set @up_sal=0
set @count1=(select count(*) from #t)
set @count2=(select count(8) from #t where sal<6000)
while(@count2>(@count1/2))
begin
update #t set sal=sal+100
set @count1=(select count(*) from #t)
set @count2=(select count(8) from #t where sal<6000)
set @up_sal=@up_sal+100
end
select @up_sal
end
go
exec add_sal
go
drop table #t
(所影响的行数为 9 行)
id name sal
----------- ---------- -----------
1 alex 1500
2 kelly 5000
3 lily 10000
4 judy 6000
5 tom 5900
6 cherly 4000
7 cherly 3500
8 romeo 7000
9 frank 5500
(所影响的行数为 9 行)
(所影响的行数为 9 行)
(所影响的行数为 9 行)
(所影响的行数为 9 行)
(所影响的行数为 9 行)
(所影响的行数为 9 行)
-----------
500
(所影响的行数为 1 行)