zoukankan      html  css  js  c++  java
  • MS触发器学习

    create trigger dd on Chat For Insert,Update as
    if(Update(chat) and Update(cmaster))
    begin
    declare @c char(15)
    set @c=(select chat from inserted)
    print @c
    raiserror('chat',16,10)
    rollback tran
    return
    end

    Update chat set chat='2',cmaster='1'
    where cid='1'

    Unnamed

    从生成的错误消息来看,Procedure dd,表明触发器是存储过程,

    触发器分两种类型,一个后触发,一个是替代触发,上面的触发就是后触发,即在DML语法发生之后,数据提交到资料库之前,触发器发生。

    在触发器发生之后,数据提交之前,MS生成两个特殊的临时表inserted和deleted,inserted存储的是新增的行(Insert 的新行,Update的新行),deleted存储的是被删除的行(delete的行,Update的旧行)

    Update(列名),Columns_Updated()可以跟踪列值的变化。

    Update(列名)只能跟踪单个列,如果是多个列,用Update(列名) And OR Update(列名)组合,他只返回True or False,不管DML语句是否成功。

    Columns_Updated()返回的是varbinary ,例如一个表列名为C1 C2 C3 C4 C5,更新其中的C2 C3 C4,则power(2,2-1) power(2,3-1),power(2,4-1),通过和Colunms_Updated()做与操作,power(2,2-1) + power(2,3-1)+power(2,4-1)=14,则如果更新了C2 C3 C4,则Colunms_Updated()&14 >0

    power(底数,幂),这个是幂的函数

    这个是针对修改前八个列的情况,如果修改超过了8列,则使用SubString函数测试Columns_Updated()返回的更正位

    这个还不太懂 http://msdn.microsoft.com/zh-cn/library/ms186329.aspx

    raiserror(‘msg’,16,10),16是错误信息严重级别,0~18是任何用户都可以定义的,而19~25则要sysadmin权限或者alter trace权限的用户才可以定义

    ps:20 到 25 之间的严重级别被认为是致命的。如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记录到错误日志和应用程序日志。

    10是状态,便于用户查找。

    alter trigger /drop trigger trgger_name

    触发器可以嵌套也可以递归,可以引用其他资料表的对象。

  • 相关阅读:
    NOIP2014飞扬的小鸟[DP][WRONG]
    POJ2184 Cow Exhibition[DP 状态负值]
    Quantum Bogo sort浅谈
    POJ3211 Washing Clothes[DP 分解 01背包可行性]
    VIJOS P1426兴奋剂检查[DP 状态哈希]
    VIJOS P1037搭建双塔[DP]
    NOIP2006金明的预算方案[DP 有依赖的背包问题]
    POJ1742 Coins[多重背包可行性]
    NOIP水题合集[3/未完待续]
    单调队列
  • 原文地址:https://www.cnblogs.com/zqstc/p/1695354.html
Copyright © 2011-2022 走看看