本帖最后由 chirea 于 2011-06-01 01:26:31 编辑

解决方案 »

  1.   

    楼主是不是想说职位的请假次数不能大于该职位的年假天数
    用触发器吧
    create trgger inserted_on
    on 请假表
    for insert
    as
    begin
        ......
       rollback transaction
    end
      

  2.   

    create trigger insert_on on 请假表
    for insert
    as
    declare @n int
    declare @m int
    set @n=(select count(*) from 请假表 t where 职位=1 and 假别=1)
    set @m=(select 天数 from 年假 where 职位=1)
    --if(select count(*) from 请假表 where 职位=1 and 假别=1)>(select 天数 from 年假)
    if (@n>@m)
    begin
       rollback transaction
       raiserror('职位一的员工请假天数不能超过年假的天数!',16,20)end

    不知对不对
      

  3.   

    create table #年假 (职位 int,年资 int,天数 int)
    insert into #年假 values(1,1,7)
    insert into #年假 values(9,2,7)
    create table #公体假 (职位 int,天数 int)
    insert into #公体假 values(1,7)
    insert into #公体假 values(9,7)
    create table #假别 (假编号 int,名称 nvarchar(50),)
    insert into #假别 values(1,'年假')
    insert into #假别 values(2,'公休假')
    create table #请假表 (职位 int,员工编号 nvarchar(50),假别 int)
    insert into #请假表 values(1,'001',1)
    insert into #请假表 values(9,'002',2)
    insert into #请假表 values(9,'002',2)
    insert into #请假表 values(9,'002',2)
    insert into #请假表 values(9,'002',2)
    insert into #请假表 values(9,'002',2)
    insert into #请假表 values(9,'002',2)
    go
    --另应有员工表,说明该员工年资,否则要以参数代入,还有,假别表没用,还是要通过参数来判断取哪个表,总之数据库设计得不太精妙
    create procedure setqj
    (@ygbh varchar(10),@zw int,@jb int)--,@nz int
    as
    begin
    declare @flg int
    if @jb=1
    select top 1 @flg=case when 天数>(select count(*) from #请假表 where 员工编号=@ygbh and 假别=@jb) then 1 else 0 end from #年假 where 职位=@zw --and 年资=@nz
    else if @jb=2
    select top 1 @flg=case when 天数>(select count(*) from #请假表 where 员工编号=@ygbh and 假别=@jb) then 1 else 0 end from #公体假 where 职位=@zw
    if @flg=1
    begin
    insert into #请假表 select @zw,@ygbh,@jb
    select '插入成功'
    end
    else if @flg=0
    select '假期已满'
    else
    select '数据有误'
    end
    go
    exec setqj '002',9,2
    go
    exec setqj '002',9,2
    /*--------
    插入成功(1 行受影响)
    --------
    假期已满(1 行受影响)
    */
    go
    drop table #年假,#公体假,#假别,#请假表
    drop procedure setqj