考勤汇总表kqyhz
主要字段
att_year 年 int
att_month 月 char
att_code 卡号 int
att_cdsj 迟到分钟 float
att_ztsj 早退分钟 float
att_ybzs 夜班次数 float
根据年,月,卡号三个条件可唯一确定一个人看他有没有迟到,早退及夜班次数这三个字段是否有值,如有则调用存储过程算出相应的工资。
薪资明细表gzzl
主要字段
nf 年 int
yf 月 int
per_code 卡号 char
gza09 夜宵补助 float
gzb06 迟到早退扣除 float
帮我写两个存储过程
1:夜班次数*5返回给gza09 条件:年,月,卡号唯一确定一条记录
2:(迟到分钟+早退分钟)*1反回给gzb06 条件:年,月,卡号唯
附上标准格式一个,
通过存储过程计算.一般比较复杂的计算项目可通过此方法解决.
选取此项时,存储过程名称即为项目代号名.如工龄工资的计算方法选为'通过存储过程计算'此项时存储过程名称即为GZA10.建立存储过程需要知道sql server 2000知识的人员,并且需要了解人事考勤薪资系统软件kqwinsV11.0的人事资料表和考勤汇总资料表的字段对应说明.请参阅字段对应表.
下面举例说明建立存储过程GZA10.sql的方法:
1 按'开始'->程序->'Microsoft SQL Server'-->
'Query Analyzer'-->按OK-->选择右上角DB:右边下拉框中的kqdata.
2 在屏幕中输入以下语句:
if exists (select * from sysobjects where id = object_id(N'[dbo].[GZA10]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GZA10]
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
CREATE PROCEDURE gza10 (@nf int, @yf int,@per_code varchar(10), @returnval float output) with encryption AS
/*
参数说明
@nf 年份
@yf 月份
@per_code 员工的卡号
@returnval 要返回金额的变量
每个存贮过程的参数都是这样设置
*/
begin
declare @per_jcdate datetime --定义入职日期变量
select @returnval=0
if exists(select * from personal where per_code=@per_code) --此员工在职
begin
select @per_jcdate=per_jcdate from personal where per_code=@per_code
end else begin
if exists(select * from lzk where per_code=@per_code) --此员工离职
select @per_jcdate=per_jcdate from lzk where per_code=@per_code
end
if @per_jcdate is not null
begin
if @per_jcdate<'10/01/2004' select @returnval=10 --入职日期小于2004年10月1号的金额=10元
if @per_jcdate>='10/01/2004' select @returnval=20 --入职日期大于等于2004年10月1号的金额=20元
end
end
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
很急,拜托了!!!