回 帖 发 新 帖 刷新版面

主题:delete触发器用法一题

/*transinfo--交易信息表*/

if exists(select * from sysobjects where name = 'trig_delete_transinfo')
    drop trigger trig_delete_transinfo
go

/*创建delete触发器*/
create trigger trig_delete_transinfo
on transinfo
for delete
as
print'开始备份数据,请稍后...'
declare @date int
select @date=datediff(day,transDate,getdate()) from transinfo
if @date>30
begin
    if not exists(select * from sysobjects where name = 'backupTable')
        select * into backupTable from deleted
    else
        insert into backupTable select * from deleted
    print'备份成功!备份表中的数据为:' select * from backupTable
end
else
begin
    print'删除失败'
    raiserror('警告:不能删除一个月以内的数据!',16,1)
    rollback transaction
end
go


/*测试触发器*/
set nocount on
delete transinfo
print'交易信息表中的数据为:'
select * from transinfo

以上delete触发器的创建过程.
我的操作方法:
首先将系统时间改成2个月前,然后在transinfoz表中输入一条记录.再将系统时间改为当前时间.执行delete transinfo.显示如下:

服务器: 消息 50000,级别 16,状态 1,过程 trig_delete_transinfo,行 20
警告:不能删除一个月以内的数据!
开始备份数据,请稍后...
删除失败

我的本意应该是执行if语句,怎么会执行else语句?求助...

回复列表 (共3个回复)

沙发

if 判断有问题

  应该是 当前的时间 - 注册的时间 >30 

@date=datediff(day,transDate,getdate()) 
  datediff 比较两个日期的 日部分之差

板凳

select @date=datediff(day,transDate,getdate()) from transinfo
if @date>30

datediff 比较两个日期的 日部分之差

将差值赋给@date,判断@date是否大于30天
应该没有错啊

3 楼

我是刚学的,问一个白痴问题,触发器是干什么用的阿?老师让练弄一个,但是一直不知道这是干什么用的,请高手知道一下

我来回复

您尚未登录,请登录后再回复。点此登录或注册