create trigger tri_test
 on tb
instead of update,delete
as
   if exists(select * from deleted d where 日期 between '2008-01-01' and '2008-04-04')
   begin
      rollback tran
      return
   end
   --xx其它事情
go

解决方案 »

  1.   

    按照时间分为不同的文件组,然后在文件组上设置为只读.
    对于数据文件组和数据的只读
    Read-Only filegroups and Locking 
    http://blogs.msdn.com/sqlserverstorageengine/archive/2007/01/08/read-only-filegroups-and-locking.aspx
    对于整个数据库的只读,
    http://www.informit.com/guides/content.aspx?g=sqlserver&seqNum=268
      

  2.   


    create trigger tri_test 
     on tb 
    instead of update,delete 
    as 
       if exists(select * from deleted d where 日期 between '2008-01-01' and '2008-04-04') 
       begin 
          rollback tran 
          return 
     IF @@rowcount=0
    select '嘿嘿,小样,就知道你改不了吧。' as  警告
    ELSE
    SELECT '靠,这样你也能改成。你太BT了吧。' 警告
       end 
      

  3.   


    /*
    我给个建议,如果触发事件,最好把 内容插入到 另外一张表内。记录IP 和其他的。这叫安全嘛
    */
    create trigger tri_test 
     on tb 
    instead of update,delete 
    as 
       if exists(select * from deleted d where 日期 between '2008-01-01' and '2008-04-04')select * into tablename from deleted  IF   @@rowcount=0 
    select   '嘿嘿,小样,就知道你改不了吧。 '  as     警告 
    ELSE 
    SELECT   '靠,这样你也能改成。你太BT了吧。 '  as    警告    begin 
          rollback tran 
          return 
       end 
      

  4.   

    参考http://topic.csdn.net/u/20080404/17/15034444-e1c8-4c30-95cb-393952878daa.html