创建一条触发器,现在我的表是这样的:
create table MONTHPAY(
EMPCODE CHAR(11) NOT NULL,--员工编号
CURRENTTIME DATE,--发放时间(更改,只显示年月)
BASEPAY NUMERIC,--基本工资
ATTEND NUMERIC,--出勤奖罚
INSURANCE NUMERIC,--保险
FUND NUMERIC,--基金
SUBSIDY NUMERIC,--津贴
BONUS NUMERIC,--奖金
DEFAULT1 NUMERIC,--预留1
DEFAULT2 NUMERIC,--预留2
DEFAULT3 NUMERIC,--预留3
TAX NUMERIC,--缴税
total numeric,--总工资
PRIMARY KEY(EMPCODE,CURRENTTIME)
)插入记录时不写入total值,在插入成功后自动计算填写总工资
total=BASEPAY+ATTEND+INSURANCE+FUND+SUBSIDY+BONUS+DEFAULT1+DEFAULT2+DEFAULT3+TAX请问要怎么写这个触发器?另外还有一个出勤表,用来计算出勤奖罚
create table ATTENDENCE(
SERIAL INT IDENTITY(0,1),--明细序列(标识符)
EMPCODE CHAR(11),--员工编号
ATTEVENT NCHAR(4),--事件(旷工、请假、加班)
ATTDATE DATE,--事件日期
)
当事件为矿工时attend-100,请假attend-50,加班attend+100
不知道这个可不可以写在MONTHPAY表的触发器里?即在插入时也不手动去写它的值,插入后自动计算填写
我的想法是在出勤表按员工编号分组后计算出来再插入,但不知道怎么写触发器。
在插入MONTHPAY的表记录时就触发计算填写请各位帮帮忙吧~谢谢了!!
create table MONTHPAY(
EMPCODE CHAR(11) NOT NULL,--员工编号
CURRENTTIME DATE,--发放时间(更改,只显示年月)
BASEPAY NUMERIC,--基本工资
ATTEND NUMERIC,--出勤奖罚
INSURANCE NUMERIC,--保险
FUND NUMERIC,--基金
SUBSIDY NUMERIC,--津贴
BONUS NUMERIC,--奖金
DEFAULT1 NUMERIC,--预留1
DEFAULT2 NUMERIC,--预留2
DEFAULT3 NUMERIC,--预留3
TAX NUMERIC,--缴税
total numeric,--总工资
PRIMARY KEY(EMPCODE,CURRENTTIME)
)插入记录时不写入total值,在插入成功后自动计算填写总工资
total=BASEPAY+ATTEND+INSURANCE+FUND+SUBSIDY+BONUS+DEFAULT1+DEFAULT2+DEFAULT3+TAX请问要怎么写这个触发器?另外还有一个出勤表,用来计算出勤奖罚
create table ATTENDENCE(
SERIAL INT IDENTITY(0,1),--明细序列(标识符)
EMPCODE CHAR(11),--员工编号
ATTEVENT NCHAR(4),--事件(旷工、请假、加班)
ATTDATE DATE,--事件日期
)
当事件为矿工时attend-100,请假attend-50,加班attend+100
不知道这个可不可以写在MONTHPAY表的触发器里?即在插入时也不手动去写它的值,插入后自动计算填写
我的想法是在出勤表按员工编号分组后计算出来再插入,但不知道怎么写触发器。
在插入MONTHPAY的表记录时就触发计算填写请各位帮帮忙吧~谢谢了!!
求SQL语句
--生成测试数据(没事可做了)
create table MONTHPAY
(
EMPCODE CHAR(11) NOT NULL,--员工编号
CURRENTTIME DATETIME,--发放时间(更改,只显示年月)
BASEPAY NUMERIC,--基本工资
ATTEND NUMERIC,--出勤奖罚
INSURANCE NUMERIC,--保险
FUND NUMERIC,--基金
SUBSIDY NUMERIC,--津贴
BONUS NUMERIC,--奖金
DEFAULT1 NUMERIC,--预留1
DEFAULT2 NUMERIC,--预留2
DEFAULT3 NUMERIC,--预留3
TAX NUMERIC,--缴税
TOTAL NUMERIC,--总工资
)
insert into MONTHPAY
select '1','','20','0','10','20','30','10','10','10','10','10','0' union all
select '2','','30','0','10','20','30','10','10','10','10','10','0' union all
select '3','','40','0','10','20','30','10','10','10','10','10','0' union all
select '4','','50','0','10','20','30','10','10','10','10','10','0'
gocreate table ATTENDENCE
(
SERIAL INT IDENTITY(0,1),--明细序列(标识符)
EMPCODE CHAR(11),--员工编号
ATTEVENT NCHAR(4),--事件(旷工 0、请假 1、加班 2、正常 3)
ATTDATE DATETIME,--事件日期
)
insert into ATTENDENCE
select '1','0','' union all
select '2','1','' union all
select '3','2','' union all
select '4','3',''
gocreate trigger T_MONTH on MONTHPAY
for insert
as
begin
update MONTHPAY
set TOTAL = BASEPAY+ATTEND+INSURANCE+FUND+SUBSIDY+BONUS+DEFAULT1+DEFAULT2+DEFAULT3+TAX
+(case b.ATTEVENT when '0' then -100 when '1' then -50 when '2' then 100 else 0 end)
from ATTENDENCE b where b.EMPCODE = MONTHPAY.EMPCODE
end
goinsert into ATTENDENCE select '5','0',''
insert into MONTHPAY select '5','','60','0','10','20','30','10','10','10','10','10','0'select EMPCODE,TOTAL from MONTHPAYdrop table MONTHPAY,ATTENDENCEEMPCODE TOTAL
----------- ----------
1 30
2 90
3 250
4 160
5 70(5 行受影响)
SQL里的Tab在这里怎么排不好版呢?研究ing...