我想在触发器中做如下操作,就是如果有"UPDATE order1 set status='6'"
这样一条语句的话就不做UPDATE操作,但是其它的UPDATE还是正常操作.

解决方案 »

  1.   

    if not(update(status) and exists(select 1 from inserted i,deleted d where i.id=d.id and i.status='6'))
    begin
      --语句
    end
      

  2.   

    简单点的可以用记录数限制create trigger tr_tablename
    for tablename
    on update,delete
    as
    if (select count(*) from deleted)>10
    BEGIN
       RAISERROR ('一次不能删除、修改多于10条记录',16, 1)
       ROLLBACK TRANSACTION
    ENDgo
      

  3.   

    有点意思就是如果有"UPDATE order1 set status='6'"
    这样一条语句的话就不做UPDATE操作
    -----------------------------------------------是有这样的语句, 还是有这样的更新操作啊? 如果是语句的话, 得得到当前操作的语句做判断, 如果是检查有没有这样的更新动作, 那用触发器
      

  4.   

    估计楼主的意思是不写where的就不执行--建立测试环境
    create table testtri (
    id int,
    data varchar(20)
    )
    insert testtri 
    select 1,'1'
    union all
    select 2,'2'
    union all
    select 3,'3'
    union all
    select 4,'4'
    union all
    select 5,'5'--建立触发器
    create trigger tr_testtri
    on testtri
    for update,delete
    as
    set nocount on
    create table #t(EvebtType varchar(60),Parameters int,EventInfo varchar(2000))
    declare @id varchar(20)
    set @id=@@spid
    insert #t
    exec('DBCC INPUTBUFFER ('+@id+')')if exists (select 1 from #t where EventInfo not like '%where%')
    BEGIN
       RAISERROR ('删除、修改语句必须写where部分',16, 1)
       ROLLBACK TRANSACTION
    ENDgo
    --测试删除
    delete testtri/*结果
    服务器: 消息 50000,级别 16,状态 1,过程 tr_testtri,行 14
    删除、修改语句必须写where部分
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    */
    --检查结果
    select * from testtri
    --测试修改
    update testtri set data='bad'/*结果
    服务器: 消息 50000,级别 16,状态 1,过程 tr_testtri,行 14
    删除、修改语句必须写where部分
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    */
    --检查结果
    select * from testtri
      

  5.   

    --测试修改
    update testtri set data='good' where id=1/*结果
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    */--检查结果
    select * from testtri
    /*结果
    id          data                 
    ----------- -------------------- 
    1           good
    2           2
    3           3
    4           4
    5           5(所影响的行数为 5 行)
    */