try:CREATE PROCEDURE ScGZ @year int,@month int ,@date datetime AS
declare @count int 
declare @PrevYear int,@PrevMonth int --上一個月的年份,月份
declare @returnValue int
set xact_abort on 
begin tran ----- 判斷出勤記錄是否全部鎖定,沒有鎖定則不能算工資
  exec @returnValue = checkcqzliflock  @year,@month
  if @returnValue = -1
        return
.....
commit tran 
CREATE proc checkcqzliflock @year int,@month int as 
set xact_abort on 
begin tran 
  declare getstate_curs cursor for 
     select r.sfzhm,r.name,x.state from rgjbzl r, rgcqinput x where r.sfzhm=x.sfzhm and x.yy=@year and x.mm=@month
  open getstate_curs
  declare @sfzhm varchar(30),@name varchar(10),@state char(1)
  fetch next from getstate_curs into @sfzhm ,@name,@state
  while  (@@fetch_status=0)
     begin      if @state<4 
       begin
         select @s='"'+@name+'"'+'的出勤資料未鎖定!'
         raiserror(@s,16,1)         
         commit tran
         return  -1
       end
       fetch next from getstate_curs into @sfzhm ,@name,@state
     end  
   close getstate_curs
   deallocate getstate_curs
   return 0