创建存储过程

来源:互联网 发布:淘宝不能登录 编辑:程序博客网 时间:2024/06/10 13:21

-- 功能:用存储过程实现对工作表和休息表的更新
--
-- 创建时间:2010-12-14

----------------------------- 创建存储过程 -------------------------------


--1、工作转休息
-----名称:Proc_UpdateDayOff
-----参数:@offdate , @remark  , @flag
create proc Proc_UpdateDayOff @offdate datetime, @remark nvarchar(50) , @flag bit
as
 begin tran   -- 开始事务
  insert into DayOff(RestDate,Remarks,Flag) values (@offdate,@remark,@flag)
  delete from WorkDay where WorkDate = @offdate
 if @@error > 0  -- 判断操作是否出现错误
  begin
   Rollback tran  -- 出现错误 -> 回滚
   select 0
  end
 else
  begin
   commit tran   -- 没有错误 -> 执行
   select 1
  end
--1、工作转休息
----定义参数
declare @offdate datetime
declare @remark = nvarchar(50)
declare @flag = bit
----设置参数
set @offdate = '2010/02/01'
set @remark = '放假'
set @flag = 1
----执行
EXEC Proc_UpdateDayOff @offdate, @remark,@flag

 

 


--2、休息转工作
-----名称:Proc_UpdateWorkDay
-----参数:@ondate
-- 把休息表的数据添加到工作表
create proc Proc_UpdateWorkDay @ondate datetime
as
 begin tran   -- 开始事务
  insert into WorkDay(WorkDate) values (@ondate)
  delete from DayOff where RestDate = @ondate
 if @@error > 0  -- 判断操作是否出现错误
  begin
   Rollback tran  -- 出现错误 -> 回滚
   return 0
  end
 else
  begin
   commit tran   -- 没有错误 -> 执行
   select 1
  end
--2、休息转工作
----定义参数
declare @ondate datetime
----设置参数
set @ondate = '2010/2/3'
---执行
EXEC Proc_UpdateWorkDay @ondate

 

 

 

--3、设定法定节日
----名称: Proc_SetDayOff
----参数: @starttime,@endtime, @remark, @flag
alter proc Proc_SetDayOff
(
 @starttime datetime,   --开始日期
 @endtime datetime,     --结束日期
 @remark nvarchar(50),  --备注
 @flag bit              --是否为法定节日
)
as
 begin tran   -- 开始事务

 while(datediff(d,@starttime,@endtime) >= 0 )
 begin
  insert into DayOff(RestDate,Remarks,Flag) values (@starttime,@remark,@flag)
  delete from WorkDay where WorkDate = @starttime
  set @starttime = dateadd(d,1,@starttime)

  if @@error > 0  -- 判断操作是否出现错误
   begin
    Rollback tran  -- 出现错误 -> 回滚
    select 0
   end
 end

 commit tran   -- 没有错误 -> 执行
 select 1
--3、设定法定节日
----定义参数
declare @starttime datetime
declare @endtime datetime
declare @remark nvarchar(50)
declare @flag bit
----赋值
set @starttime = '1905/6/25'
set @endtime = '1905/6/28'
set @remark = '放假'
set @flag = 0
----执行
EXEC Proc_SetDayOff @starttime,@endtime,@remark,@flag

 

----查询执行后结果
select * from DayOff
select * from WorkDay