文章目录
- @[toc]
- 1.需求及效果
- 1.1 需求
- 1.2 效果
- 2.思路与实现
- 3.结语
文章目录
- @[toc]
- 1.需求及效果
- 1.1 需求
- 1.2 效果
- 2.思路与实现
- 3.结语
1.需求及效果
1.1 需求
在明细表中的项目经理,可以将值赋值给主表中的项目经理来作为审批人员
1.2 效果
在申请人保存或者提交后将明细表中的人名赋值给主表中对应的值
2.思路与实现
在通过js测试后,不能够百分百的赋值成功,只能在数据库中写触发器来确保每次都能够赋值成功。
注意点:1.明细表中的项目经理可能是多个不同的人,所以需要将值都取出来,写到同一行,并用逗号隔开,确保与主表中的多人力资源在数据库中存储的格式相同。
2.我这里的项目经理是汉字,并不是存储的人力资源字段对应的数字,所以还需要从HRmresource表中获取人名对应的id
/*
此触发器用来使用明细表中的项目经理赋值给主表中的项目经理及申请人带出人力资源部考勤工时
1.明细表中的项目经理可能存在多个,所以需要多对一
2.主表中的项目经理是int类型,需要用HrmResource转化
3.申请人带出人力资源部导入的考勤工时
*/
CREATE TRIGGER trg_yyhc_xxgs
ON dbo.formtable_main_201
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON; --不返回结果行数
-- 声明变量
DECLARE @requestID INT, --请求id
@sqr INT, --申请人
@name NVARCHAR(100), --项目工时中的name
@gs DECIMAL(10,4), --工时
@xmjl NVARCHAR(100), --项目经理(项目负责人)
@id INT; --主表id
-- 查询插入的数据
SELECT @requestID = i.requestId, @sqr = i.sqr,@id=i.id FROM inserted i;
-- 获取姓名
SELECT @name = hr.lastname FROM dbo.HrmResource hr WHERE hr.id = @sqr;
-- 获取工时值
SELECT @gs = yy.gs FROM dbo.yyhc_yybgg yy WHERE yy.name = @name;
--根据id获取明细表中的项目经理
SELECT @xmjl = STUFF((SELECT DISTINCT ',' + CAST(hr.id AS NVARCHAR)
FROM formtable_main_201_dt1 dt
JOIN HrmResource hr ON dt.xmjl = hr.lastname
WHERE dt.mainid = @id
FOR XML PATH('')), 1, 1, '')
-- 更新数据
--0709日更改,不是项目成员无法更新数据,没有项目经理即不能提交
IF EXISTS (SELECT 1 FROM yyhc_xmcylb WHERE name=@name)
BEGIN
UPDATE m SET m.rlzybtggs = @gs,m.xmfzr=@xmjl FROM dbo.formtable_main_201 m WHERE m.requestId = @requestID;
END
END;
3.结语
可以通过触发器来完成明细表中的值赋值给对应的主表的值,当然还可以建一些表通过匹配给他们赋值,也会大大减少填写的内容。