sql存储过程

 

 
语法:
create proc procname(
@para1,
@para2
as
begin
procedure~~~
end
执行调用:
exec procname@para1=?,@para2=?;
实例:

程序员工资表:ProWage

字段名称

数据类型

说明

ID

int

自动编号,主键

PName

Char(10)

程序员姓名

Wage

int

工资

创建一个存储过程,对程序员的工资进行分析,月薪150010000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?

例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写T-SQL来实现如下功能:

1)   创建存储过程,查询是否有一半程序员的工资在220030003500400050006000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到220030003500400050006000元。

2)   创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。

 

建表语句

USE master

GO

/*$$$$$$$$$$$$$建库$$$$$$$$$$$$$$$$$$$$$$$$*/

--检验数据库是否存在,如果为真,删除此数据库--

IF exists(SELECT * FROM sysdatabases WHERE name='Wage')

  DROP DATABASE Wage

GO

CREATE DATABASE Wage

GO

 

--建数据表--

USE Wage

GO

CREATE TABLE ProWage  --程序员工资表

(

  ID int identity(1,1) primary key,  --工资编号

  PName  CHAR(10) NOT NULL ,     --程序员姓名

  Wage  int NOT NULL    --工资

)

GO

--插入数据--

INSERT INTO ProWage(PName,Wage)VALUES('青鸟',1900)

INSERT INTO ProWage(PName,Wage)VALUES('张三',1200)

INSERT INTO ProWage(PName,Wage)VALUES('李四',1800)

INSERT INTO ProWage(PName,Wage)VALUES('二月',3500)

INSERT INTO ProWage(PName,Wage)VALUES('蓝天',2780)

标准答案:

 

--1、创建存储过程--

if exists (select * from sysobjects where name='Sum_wage')

drop procedure Sum_wage

GO

create procedure Sum_wage

@PWage int,

@AWage int,

@total int

as

while (1=1)

begin

if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage)

update ProWage set @total=@total+@AWage,Wage=Wage+@AWage

else

break

end

print'一共加薪:'+convert(varchar,@total)+''

print'加薪后的程序员工资列表:'

select * from ProWage

--调用存储过程1--

exec Sum_wage @PWage=2000,@AWage=100,@total=0

exec Sum_wage @PWage=2200,@AWage=100,@total=0

exec Sum_wage @PWage=3000,@AWage=100,@total=0

exec Sum_wage @PWage=4000,@AWage=100,@total=0

exec Sum_wage @PWage=5000,@AWage=100,@total=0

exec Sum_wage @PWage=6000,@AWage=100,@total=0

 

--2、创建存储过程2--

if exists (select * from sysobjects where name='Avg_wage')

drop procedure Avg_wage

GO

create procedure Avg_wage

@PWage int,

@AWage int,

@total int

as

while (1=1)

begin

if ((select Avg(Wage) from ProWage)<=@PWage)

update ProWage set @total=@total+@AWage,Wage=Wage+@AWage

else

break

end

print'一共加薪:'+convert(varchar,@total)+''

print'加薪后的程序员工资列表:'

select * from ProWage

--调用存储过程--

exec Avg_wage @PWage=3000,@AWage=200,@total=0

exec Avg_wage @PWage=4500,@AWage=200,@total=0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值