求一个sqlserver存储过程,有两张表,一主一副,要求是把副表的数据插入主表,要根据部门号判断

根据部门号判断
如果这条数据的部门号主表没有则插入,如果有则把两个表中的同一部门数据相加求总值更新到主表中

CREATE PROCEDURE [dbo].[up_UpdateDeptMain]

AS

INSERT Dept_Main
(Dept_Id,Total_Val)
SELECT distinct Dept_Id , 0 as Total_Val FROM Dept_Detail
where Dept_Id not In (select Dept_Id from Dept_Main) and Dept_Id <>''

update Dept_Main
set Total_Val = Total_Val + b.Sub_Total_Val
from Dept_Main a , (select Dept_Id , sum(Sub_Val) as Sub_Total_Val from Dept_Detail where Dept_Id <>'' group by Dept_Id ) b
where a.Dept_Id = b.Dept_Id

主表 Dept_Main
副表 Dept_Detail

CREATE PROCEDURE [dbo].[up_UpdateDeptMain]

AS

INSERT Dept_Main
(Dept_Id,Total_Val)
SELECT distinct Dept_Id , 0 as Total_Val FROM Dept_Detail

where Dept_Id not In (select Dept_Id from Dept_Main)

update Dept_Main
set Total_Val = Total_Val + b.Sub_Total_Val
from Dept_Main a , (select Dept_Id , sum(Sub_Val) as Sub_Total_Val from Dept_Detail group by Dept_Id) b
where a.Dept_Id = b.Dept_Id

相加求总值什么意思?都是数字没汉字或英文字母?

主表名:zhu
副表名:fu

主表字段:
1.bmNo 部门编号
2.Shu 数量

副表字段:
1.bmNo 部门编号
2.Shu 数量

CREATE PROCEDURE BUMENACTION

AS
BEGIN
--开启事务
BEGIN TRANS

                INSERT INTO ZHU(
                                BMNO, SHU
                )
                SELECT  FU.BMNO, FU.SHU
                FROM ZHU
                INNER JOIN FU
                ON ZHU.BMNO=FU.BMNO
                WHERE ZHU.BMNO IS NULL                  
                IF @@ERROR <> 0
                BEGIN
                                    ROLLBACK
                                    RETURN
                END

                UPDATE  ZHU
                SET    ZHU.SHU = ZHU.SHU + FU.SHU                           
                FROM ZHU
                INNER JOIN FU
                ON ZHU.BMNO=FU.BMNO                 
                IF @@ERROR <> 0
                BEGIN
                                    ROLLBACK
                                    RETURN
                END


                --提交
                COMMIT

END
(此程序运行前提是主键有且只有一个--部门编号)

使用游标: 能不用就不用。复杂的处理或单纯sql无法实现再使用游标。(运行节省时间)