記錄下 第一次使用sql server 寫存儲。
一般在處理複雜的數據的時候,最好還是使用臨時表把數據封裝起來 再做各種的運算;
create table #issuesData(annualAppliedDays numeric(18, 1),annualBalanceDays numeric(18, 1),annualCarryForwardDays numeric(18, 1),requestNo varchar(50),submissionDate varchar(50),nodeId varchar(50),staffCode varchar(50),leaveDate numeric(18, 1),formeDate varchar(50),toDate varchar(50))
insert into #issuesData select
(select annual_applied_days from teflow_leave_balance where staff_code = b.request_staff_code and [year] = 2019) as annualAppliedDays,
(select annual_balance_days from teflow_leave_balance where staff_code = b.request_staff_code and [year] = 2019) as annualBalanceDays,
(select annual_carry_forward_days from teflow_leave_balance where staff_code = b.request_staff_code and [year] = 2019) as annualCarryForwardDays,
a.request_no as requestNo,
b.Submission_date as submissionDate,
b.node_id as nodeId,
b.request_staff_code as staffCode,
a.field_02_12 as leaveDate,
a.field_02_3 as formeDate,
a.field_02_5 as toDate
from teflow_152_02 a
left join teflow_wkf_process b
on a.request_no = b.request_no
where a.field_02_3 <= '2018-12-31 23:59:59'
and a.field_02_8 like '%Annual Leave%'
and b.node_id = -1
and b.Submission_date > '2018-12-31 23:59:59'
以下是簡單的使用遊標循環操作表的例子
使用的sql server 數據庫,其他的數據庫語法上注意下就好
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[issues_leave]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[issues_leave]
GO
CREATE proc [dbo].[issues_leave]
as
begin
declare
@annualAppliedDays numeric (18,1)= 0,
@annualBalanceDays numeric (18,1)= 0,
@annualCarryForwardDays numeric (18,1)= 0,
@currentLeaveDays numeric (18,1)= 0,
@staffCode varchar (30)
--drop table #issuesData
begin
-- select * from #issuesData
--定義遊標
declare order_cursor cursor for (select leaveDate,annualAppliedDays,annualBalanceDays,annualCarryForwardDays,staffCode from #issuesData)
--打開遊標--
open order_cursor
--開始循環遊標變量--
fetch next from order_cursor into @currentLeaveDays,@annualAppliedDays,@annualBalanceDays,@annualCarryForwardDays,@staffCode;
if(@annualCarryForwardDays > 1)
begin
if(@annualAppliedDays = 0)--未休
begin
select @annualBalanceDays = @annualBalanceDays - 1
select @annualCarryForwardDays = @annualCarryForwardDays - 1;
update teflow_leave_balance set annual_carry_forward_days = @annualCarryForwardDays,annual_balance_days = @annualBalanceDays where staff_code = @staffCode and [year] = 2019;
end
else if (@annualAppliedDays > 1) --已休
begin
select @annualAppliedDays = @annualAppliedDays - 1
select @annualCarryForwardDays = @annualCarryForwardDays - 1;
update teflow_leave_balance set annual_carry_forward_days = @annualCarryForwardDays,annual_applied_days = @annualAppliedDays where staff_code = @staffCode and [year] = 2019;
end
end
else
begin
if(@annualAppliedDays = 0)--未休
begin
select @annualBalanceDays = @annualBalanceDays - 0.5
select @annualCarryForwardDays = @annualCarryForwardDays - 0.5;
update teflow_leave_balance set annual_carry_forward_days = @annualCarryForwardDays,annual_balance_days = @annualBalanceDays where staff_code = @staffCode and [year] = 2019;
end
else if (@annualAppliedDays > 1) --已休
begin
select @annualAppliedDays = @annualAppliedDays - 0.5
select @annualCarryForwardDays = @annualCarryForwardDays - 0.5;
update teflow_leave_balance set annual_carry_forward_days = @annualCarryForwardDays,annual_applied_days = @annualAppliedDays where staff_code = @staffCode and [year] = 2019;
end
end
fetch next from order_cursor into @currentLeaveDays,@annualAppliedDays,@annualBalanceDays,@annualCarryForwardDays,@staffCode;
end
close order_cursor --關閉遊標
deallocate order_cursor --釋放遊標
end