在儲存過程中計算考核總分

2021-06-16 02:50:46 字數 4571 閱讀 8024

alter procedure [dbo].[zhkh_sp_checkcompute]

@kcode char(10),--種類

@kjyear int,--會計年度

@period int--會計月度

asdeclare @type int--型別:0-部門,1-員工

declare @mcode char(10)--模組編碼

declare @deptcode char(10)--部門編碼

declare @titlecode char(10)--類別編碼

declare @ttype int--類別種類,1-績效,2-黨委,3-6s,4-無

declare @wnumber decimal(18,6)--權重

declare @number decimal(18,6)--分數

declare @totalnumber decimal(18,6)--總分數

declare @totalnumber1 decimal(18,6)--考核總分數

declare @totalnumber2 decimal(18,6)--領導總分數

declare @lcode char(10)--領導對應操作員編碼

declare @lcode1 char(10)--領導編碼

declare @lscore char(4)--領導評分等級

declare @lscore1 decimal(18,6)--領導評分分數

--分數儲存:0-各考核要素分數,1-最終得分,2-考核總分,3-領導主觀評分

begin

--刪除舊資料

delete from zhkh_basetotal where kcode=@kcode and kjyear=@kjyear and period=@period

select @type=0

declare deptcode_cursor cursor for

select deptid from zhkh_dept where dtype=@kcode order by did

open deptcode_cursor

fetch next from deptcode_cursor into @deptcode

while @@fetch_status=0

begin

--以下計算總考核分數

select @totalnumber1=0

declare weigh_cursor cursor for

select mcode,wnumber from zhkh_v_weigh where kcode=@kcode order by mcode

open weigh_cursor

fetch next from weigh_cursor into @mcode,@wnumber

while @@fetch_status=0

begin

select @number=-1

select @titlecode=titlecode,@ttype=ttype from zhkh_title where kcode=@kcode and mcode=@mcode and ktype=@type

if (@ttype=1)

select @number=objecttotal from kh_basetotal where totaltype=4 and titlecode=@titlecode and kjyear=@kjyear and period=@period and empid=@deptcode

else if (@ttype=2)

select @number=objecttotal from dwkh_basetotal where totaltype=4 and titlecode=@titlecode and kjyear=@kjyear and period=@period and empid=@deptcode

else if (@ttype=3)

select @number=-1

else if (@ttype=4)

select @number=-1

--若大於100或者小於0,則退出本次迴圈

if(@number>100 or @number<0)

begin

select @totalnumber1=@totalnumber1+0

endelse

begin

select @totalnumber1=@totalnumber1+@number*@wnumber

--將各模組分數寫入表中,階段0

insert into zhkh_basetotal(kjyear,period,score,kcode,mcode,empid,btype) values(@kjyear,@period,@number,@kcode,@mcode,@deptcode,0)

endfetch next from weigh_cursor into @mcode,@wnumber

endclose weigh_cursor

deallocate weigh_cursor

--將總分數寫入表中,步驟2

insert into zhkh_basetotal(kjyear,period,score,kcode,empid,btype) values(@kjyear,@period,@totalnumber1,@kcode,@deptcode,2)

--以上計算總考核分數

--以下計算領導主觀印象分數

select @totalnumber2=0

--查詢公司領導

declare zhkhleader_cursor cursor for

select czybm,lcode from zhkh_leader a inner join gy_czygl b on a.empid=b.empno

open zhkhleader_cursor

fetch next from zhkhleader_cursor into @lcode,@lcode1

while @@fetch_status=0

begin

--獲取考核分數

select @lscore=count(1) from zhkh_score where deptcode=@deptcode and lcode=@lcode and kjyear=@kjyear and period=@period

if(@lscore>0)

begin

select @lscore=score from zhkh_score where deptcode=@deptcode and lcode=@lcode

select @lscore1=gaulistmark from kh_gaulist where gaulistcode=@lscore

endelse

begin

select top 1 @lscore1=gaulistmark from kh_gaulist where checkcode='a01' order by gaulistcode

endselect @wnumber=lweigh from zhkh_lweigh where lcode=@lcode1 and deptcode=@deptcode

select @totalnumber2=@totalnumber2+@lscore1*@wnumber

fetch next from zhkhleader_cursor into @lcode,@lcode1

endclose zhkhleader_cursor

deallocate zhkhleader_cursor

--將總分數寫入表中,步驟3

insert into zhkh_basetotal(kjyear,period,score,kcode,empid,btype) values(@kjyear,@period,@totalnumber2,@kcode,@deptcode,3)

--以上計算領導主觀印象分數

--以下計算總分數

select @totalnumber=0

select @wnumber=wnumber from zhkh_colweigh where wid=1--基本考核權重

select @totalnumber=@totalnumber1*@wnumber

select @wnumber=wnumber from zhkh_colweigh where wid=2--領導主觀印象考核權重

select @totalnumber=@totalnumber+@totalnumber2*@wnumber

--將總分數寫入表中,步驟1

insert into zhkh_basetotal(kjyear,period,score,kcode,empid,btype) values(@kjyear,@period,@totalnumber,@kcode,@deptcode,1)

--以上計算總分數

fetch next from deptcode_cursor into @deptcode

endclose deptcode_cursor

deallocate deptcode_cursor

end

在儲存過程中分頁

用儲存過程實現的分頁程式 鄒建 2003.09 引用請保留此資訊 呼叫示例 exec p show 地區資料 exec p show 地區資料 5,3,地區編號,地區名稱,助記碼 地區編號 if exists select from dbo.sysobjects where id object id...

在儲存過程中實現事務

在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...

在儲存過程中排序分頁

在專案中,會遇到查詢出的結果排序分頁的問題,可以有多種解決方法,乙個是利用開發工具提供的方法,例如.net visual studio中的gridview,就提供了排序,分頁功能。但如果情況複雜,我們可以把排序分頁放到儲存過程來完成。以乙個簡單例子來說明問題 table reportfile fie...