请教各位高手,用触发器实现在一段时间才能对数据删除,应该怎么样实现

解决方案 »

  1.   

    这里不适合用触发器, 而是使用job
      

  2.   

    用作业调度:--作业与调度  
    --使用JOB  
    --企业管理器  
    --管理  
    --SQL Server代理  
    --右键作业  
    --新建作业  
    --"常规"项中输入作业名称  
    --"步骤"项  
    --新建  
    --"步骤名"中输入步骤名  
    --"类型"中选择"Transact-SQL 脚本(TSQL)"   
    --"数据库"选择执行命令的数据库  
    --"命令"中输入要执行的语句:   
    EXEC 存储过程名... --该存储过程用于创建表  --确定  
    --"调度"项  
    --新建调度  
    --"名称"中输入调度名称  
    --"调度类型"中选择你的作业执行安排  
    --如果选择"反复出现"   
    --点"更改"来设置你的时间安排 --该处设置为每月日的凌晨:00:00   
    --然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行  --设置方法:   
    --我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.  
      

  3.   

    JOB似乎并不能实现楼主的要求,JOB能实现定期删除数据,并不能约束什么时间不能删数据,随时都可以删。
      

  4.   

    create trigger
    on 表
    for delete
    as
    set nocount on
    --比如8点到14点不能删除数据
    if datepart(hour,getdate()) between 8 and 14
    begin
    --如果有IDENTITY列,注意设置SET IDENTITY_INSERT
    insert into 表 select * from DELETED
    print '现在不能删除数据!'
    end
    set nocount off
    go
      

  5.   

    用触发器实现在一段时间才能对数据删???
    create trigger test_tr on t1
    instead of delete
    as
    if getdate() between '2000-01-01' between '2009-01-01'
    print '不能删除'
    else
    delete t1 from t1 join deleted d on t1.id=d.idgo
    如果用after/for时,需要返回事务rollback tran
      

  6.   


    还是举个说细仔例子给楼主参照:id为唯一时
    create table t1(ID int identity(1,1),Name nvarchar(10))insert t1 select 'c'go
    create trigger test_del on t1
    instead of delete
    asif  datepart(hh,getdate())  between 0 and 8 --早上0点至8点不能删
    raiserror 50001 N'不能删除'
    else 
    delete t1 from deleted d join t1 on t1.id=d.id
    gocreate trigger test_del on t1
    for delete
    asif  datepart(hh,getdate())  between 0 and 8 --早上0点至8点不能删
    begin
    rollback tran
    raiserror 50001 N'不能删除'
    endgo
    delete t1 where id=1
    go
    drop table t1以上两种触发器都可以