三个表:学生student(学号,姓名,年龄,班号)
        班class(班号,专业名,系名,入学年份)
        系department(系号,系名)  
请使用查询分析器建表,要求声明:1.每个班级的人数不能超过20人。2.只有班级里没有学生的时候,才能删除该班级。
想了好久都不知道如果声明,望各位高人指点,不甚感激!
还有一个非自考的问题:mssql触发器中能不能用如count()这样的汇总函数,如果使用,能不能给个提示或实例!谢谢!

解决方案 »

  1.   

    create trigger tr_tb_i on tb before insert
    as
    declare @count int
    select @count = count(1) from tb
    if @count >= 20
     return
    else 
     insert tb select * from inserted   
      

  2.   

    表就不帮你见了,把重点写出来,这是要求1的SQL:CREATE   TRIGGER   tg_limitinsert   
    ON   [student]   
    FOR   insert   
    AS     
          
    BEGIN
    DECLARE @class varchar(20) 
    select  @class=inserted.[class]  from inserted         
    if (select count(*) from [student] where 班号=@class) >=20
    begin    
    ROLLBACK   TRANSACTION 
    RAISERROR   ('班级人数以满,不能插入。',16,1)--抛出异常
    end    
    END
      

  3.   

    这是要求的第二点:CREATE   TRIGGER   tg_limitinsert   
    ON   [class]   
    FOR   delete   
    AS     
          
    BEGIN
        DECLARE @class varchar(20) 
        select  @class=deleted.[class]  from deleted         
        if (select count(*) from [student] where 班号=@class) >0
        begin    
            ROLLBACK   TRANSACTION 
            RAISERROR   ('该班级还有人,不能删除该班级。',16,1)--抛出异常
        end    
    END
      

  4.   

    这是要求的第二点:CREATE   TRIGGER   tg_limitinsert   
    ON   [class]   
    FOR   delete   
    AS     
          
    BEGIN
        DECLARE @class varchar(20) 
        select  @class=deleted.[class]  from deleted         
        if (select count(*) from [student] where 班号=@class) >0
        begin    
            ROLLBACK   TRANSACTION 
            RAISERROR   ('该班级还有人,不能删除该班级。',16,1)--抛出异常
        end    
    END
      

  5.   

    4楼为无效贴
    还有一个非自考的问题:mssql触发器中能不能用如count()这样的汇总函数,如果使用,能不能给个提示或实例!谢谢!
    当然可以有count(),上面两个储发器都有count()
      

  6.   

    非常感谢,CSDN的高手就是多,这么快就解决了!!!!
      

  7.   

    CREATE   TRIGGER   tg_limitinsert   
    ON   [class]   
    FOR   delete   
    AS     
          
    BEGIN
        DECLARE @class varchar(20) 
        select  @class=deleted.[class]  from deleted         
        if (select count(*) from [student] where 班号=@class) >0
        begin    
            ROLLBACK   TRANSACTION 
            RAISERROR   ('该班级还有人,不能删除该班级。',16,1)--抛出异常
        end    
    END