亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

T-Sql(六)觸發器(trigger)

系統 2069 0
原文: T-Sql(六)觸發器(trigger)

不知不覺講到觸發器了,一般我們做程序的很少接觸到觸發器,觸發器的操作一般是DB人員來完成。

  然而有的時候一些簡單的業務需要我們自己去完成,不能每次都去麻煩DB人員,所以說,編程人員要全才,除了編程以為的專業知識也要涉獵,比如js,css,html,t-sql等一些語法,不一定要去精通,但是要熟悉,至少語法可以看懂,這樣對我們的編程有事半功倍的效果,出現異常錯誤,我們也方便調試,以便最快找出錯誤。

  言歸正傳,什么事觸發器,顧名思義,就是你做一個操作,就會觸發另一個事件,去執行一些操作。

  比如你點煙花,點是一個動作,煙花是另一個動作,點動作完成就會觸發煙花這個動作。

  還有就是觸發器必須依附一個主體,比如依附于某一張表,就像編程中事件這個概念。

  下面我們通過一個簡單的實例,和大家一步一步的來理解和運用觸發器。

  實例要求:

    1,建商品表(Store),訂單表(orders),日志表(Logs)

    2, 創建訂單表插入觸發器 ,實現插入一條訂單信息,商品表中商品數量相應減少,訂單中的總金額相應增加。

    3, 創建訂單表更新觸發器,實現更新一條訂單信息,商品表中商品數量相應變化,訂單中的總金額相應變化。(和2類似)

    4,創建日志表觸發器,實現更新商品表價格變化情況。

1,創建 商品表(Store),訂單表(orders),日志表(Logs)

第一步沒什么講解,我們創建表,并加一些示例數據。

  示例代碼:

      
         1
      
      
        create
      
      
        table
      
      
         Store


      
      
         2
      
      
        (


      
      
         3
      
           ID 
      
        uniqueidentifier
      
      
        primary
      
      
        key
      
      
        ,


      
      
         4
      
           ProductID 
      
        int
      
      
        not
      
      
        null
      
      
        ,


      
      
         5
      
           ProductPrice 
      
        money
      
      
        not
      
      
        null
      
      
        default
      
      
        1
      
      
        ,


      
      
         6
      
           ProductCH 
      
        nvarchar
      
      (
      
        80
      
      ) 
      
        not
      
      
        null
      
      
        ,


      
      
         7
      
           ProductDate 
      
        datetime
      
      
        not
      
      
        null
      
      
        ,


      
      
         8
      
           NowNumber 
      
        int
      
      
        not
      
      
        null
      
      
         9
      
      
        );


      
      
        10
      
      
        create
      
      
        table
      
      
         orders


      
      
        11
      
      
        (


      
      
        12
      
           OrderID 
      
        int
      
      
        primary
      
      
        key
      
      
        ,


      
      
        13
      
           ProductID 
      
        int
      
      
        not
      
      
        null
      
      
        ,


      
      
        14
      
           BuyNumber 
      
        int
      
      
        Not
      
      
        null
      
      
        default
      
      
        1
      
      
        ,


      
      
        15
      
           BuyPricr 
      
        money
      
      
        not
      
      
        null
      
      
        ,


      
      
        16
      
           NowOrderPrice 
      
        money
      
      
        default
      
      
        0
      
      
        17
      
      
        )


      
      
        18
      
      
        create
      
      
        table
      
      
         Logs


      
      
        19
      
      
        (


      
      
        20
      
           ID 
      
        uniqueidentifier
      
      
        primary
      
      
        key
      
      
        ,


      
      
        21
      
           operatedatetime 
      
        datetime
      
      
        ,


      
      
        22
      
           ProductID 
      
        int
      
      
        ,


      
      
        23
      
           oldprice 
      
        money
      
      
        ,


      
      
        24
      
           newprice 
      
        money
      
      
        25
      
      
        );


      
      
        26
      
      
        27
      
      
        insert
      
      
        into
      
      
         dbo.Store


      
      
        28
      
      
        values
      
      (
      
        NEWID
      
      (),
      
        1001
      
      ,
      
        5000
      
      ,
      
        '
      
      
        聯想
      
      
        '
      
      ,
      
        '
      
      
        2011-9-1
      
      
        '
      
      ,
      
        50
      
      
        )


      
      
        29
      
      
        insert
      
      
        into
      
      
         dbo.Store


      
      
        30
      
      
        values
      
      (
      
        NEWID
      
      (),
      
        1002
      
      ,
      
        6000
      
      ,
      
        '
      
      
        apple
      
      
        '
      
      ,
      
        '
      
      
        2011-9-1
      
      
        '
      
      ,
      
        50
      
      
        )


      
      
        31
      
      
        insert
      
      
        into
      
      
         dbo.orders(OrderID,ProductID,BuyNumber,BuyPricr)


      
      
        32
      
      
        values
      
      (
      
        10013
      
      ,
      
        1001
      
      ,
      
        5
      
      ,
      
        6000
      
      )
    

2,創建訂單表觸發器

  要求2,3類似操作我在一起講解了。

  先看示例代碼:

      
         1
      
      
        create
      
      
        trigger
      
      
         tri_order_NowOrderPrice


      
      
         2
      
      
        on
      
       orders after 
      
        insert
      
      
         3
      
      
        as
      
      
         4
      
      
        begin
      
      
         5
      
      
        declare
      
      
        @NowOrderPrice
      
      
        money
      
      
        ;


      
      
         6
      
      
        declare
      
      
        @BuyNumber
      
      
        int
      
      
        ;


      
      
         7
      
      
        declare
      
      
        @ProductID
      
      
        int
      
      
        ;


      
      
         8
      
      
        select
      
      
        @ProductID
      
      
        =
      
       ProductID,
      
        @BuyNumber
      
      
        =
      
       BuyNumber 
      
        from
      
      
         inserted;


      
      
         9
      
      
        select
      
      
        @NowOrderPrice
      
      
        =
      
      inserted.BuyNumber 
      
        *
      
       inserted.BuyPricr 
      
        from
      
      
         inserted;


      
      
        10
      
      
        update
      
       orders 
      
        set
      
       NowOrderPrice
      
        =
      
      
        @NowOrderPrice
      
      
        where
      
       ProductID
      
        =
      
      
        @ProductID
      
      
        ;


      
      
        11
      
      
        update
      
       Store 
      
        set
      
       NowNumber
      
        =
      
      NowNumber
      
        -
      
      
        @BuyNumber
      
      
        where
      
       ProductID
      
        =
      
      
        @ProductID
      
      
        ;


      
      
        12
      
      
        end
      
      
        ;


      
      
        13
      
      
        14
      
      
        create
      
      
        trigger
      
      
         tri_store_NowOrderPrice2


      
      
        15
      
      
        on
      
       orders after 
      
        update
      
      
        16
      
      
        as
      
      
        17
      
      
        begin
      
      
        18
      
      
        declare
      
      
        @NowOrderPrice
      
      
        money
      
      
        ;


      
      
        19
      
      
        declare
      
      
        @ProductID
      
      
        int
      
      
        ;


      
      
        20
      
      
        declare
      
      
        @BuyNumber1
      
      
        int
      
      
        ;


      
      
        21
      
      
        declare
      
      
        @BuyNumber2
      
      
        int
      
      
        ;


      
      
        22
      
      
        select
      
      
        @ProductID
      
      
        =
      
       ProductID 
      
        from
      
      
         inserted;


      
      
        23
      
      
        select
      
      
        @BuyNumber1
      
      
        =
      
      BuyNumber 
      
        from
      
      
         inserted;


      
      
        24
      
      
        select
      
      
        @NowOrderPrice
      
      
        =
      
      inserted.BuyNumber 
      
        *
      
       inserted.BuyPricr 
      
        from
      
      
         inserted;


      
      
        25
      
      
        select
      
      
        @BuyNumber2
      
      
        =
      
      deleted.BuyNumber 
      
        from
      
       deleted 
      
        where
      
       ProductID
      
        =
      
      
        @ProductID
      
      
        ;


      
      
        26
      
      
        update
      
       orders 
      
        set
      
       NowOrderPrice
      
        =
      
      
        @NowOrderPrice
      
      
        where
      
       ProductID
      
        =
      
      
        @ProductID
      
      
        ;


      
      
        27
      
      
        update
      
       Store 
      
        set
      
       NowNumber
      
        =
      
      NowNumber
      
        -
      
      (
      
        @BuyNumber1
      
      
        -
      
      
        @BuyNumber2
      
      ) 
      
        where
      
       ProductID
      
        =
      
      
        @ProductID
      
      
        ;


      
      
        28
      
      
        end
      
      ;
    

觸發器的關鍵字是trigger,語法是,on 表名 after 操作名稱(一般為insert,update,delete),begin end中寫一些觸發器的處理操作。

  inserted獲取insert之后的數據。語法就是這么簡單。

3,創建日志表觸發器

日志表觸發器要做的操作就是記錄商品價格變化,那對應就應該在商品表中創建觸發器。

  示例代碼:

      
         1
      
      
        create
      
      
        trigger
      
      
         tri_NowOrderPrice4


      
      
         2
      
      
        on
      
       dbo.Store after 
      
        insert
      
      ,
      
        update
      
      ,
      
        delete
      
      
         3
      
      
        as
      
      
         4
      
      
        begin
      
      
         5
      
      
        if
      
      
        exists
      
      (
      
        select
      
      
        *
      
      
        from
      
       inserted) 
      
        and
      
      
        exists
      
      (
      
        select
      
      
        *
      
      
        from
      
      
         deleted)


      
      
         6
      
      
        begin
      
      
         7
      
      
        print
      
      (
      
        '
      
      
        update
      
      
        '
      
      
        );


      
      
         8
      
      
        declare
      
      
        @price1
      
      
        money
      
      
        ;


      
      
         9
      
      
        declare
      
      
        @price2
      
      
        money
      
      
        ;


      
      
        10
      
      
        declare
      
      
        @datetime
      
      
        datetime
      
      
        ;


      
      
        11
      
      
        select
      
      
        @price1
      
      
        =
      
      ProductPrice 
      
        from
      
      
         deleted;


      
      
        12
      
      
        select
      
      
        @price2
      
      
        =
      
      ProductPrice 
      
        from
      
      
         inserted;


      
      
        13
      
      
        if
      
      
        @price1
      
      
        !=
      
      
        @price2
      
      
        14
      
      
        begin
      
      
        15
      
      
        declare
      
      
        @ProductID
      
      
        int
      
      
        ;


      
      
        16
      
      
        select
      
      
        @ProductID
      
      
        =
      
      ProductID 
      
        from
      
      
         inserted


      
      
        17
      
      
        insert
      
      
        into
      
      
         Logs(ID,operatedatetime,ProductID,oldprice,newprice)


      
      
        18
      
      
        values
      
      (
      
        newid
      
      (),
      
        convert
      
      (
      
        datetime
      
      ,
      
        getdate
      
      ()),
      
        @ProductID
      
      ,
      
        @price1
      
      ,
      
        @price2
      
      
        )


      
      
        19
      
      
        20
      
      
        select
      
      
        *
      
      
        from
      
      
         dbo.Logs


      
      
        21
      
      
        end
      
      
        22
      
      
        end
      
      
        23
      
      
        else
      
      
        if
      
      
        exists
      
      (
      
        select
      
      
        *
      
      
        from
      
      
         inserted)


      
      
        24
      
      
        begin
      
      
        25
      
      
        print
      
      (
      
        '
      
      
        insert
      
      
        '
      
      
        );


      
      
        26
      
      
        end
      
      
        27
      
      
        else
      
      
        if
      
      
        exists
      
      (
      
        select
      
      
        *
      
      
        from
      
      
         deleted)


      
      
        28
      
      
        begin
      
      
        29
      
      
        print
      
      (
      
        '
      
      
        delete
      
      
        '
      
      
        );


      
      
        30
      
      
        end
      
      
        31
      
      
        else
      
      
        32
      
      
        begin
      
      
        33
      
      
        print
      
      (
      
        '
      
      
        others
      
      
        '
      
      
        );


      
      
        34
      
      
        end
      
      
        35
      
      
        end
      
    

觸發器就是這些內容,有關觸發器的 一些 復雜操作希望大家有時間研究下,講的不好請大家多多指正,希望大家學好t-sql語言。

  以后繼續整理編程相關內容,希望大家多多關注。。。。

T-Sql(六)觸發器(trigger)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天躁夜夜躁很很躁麻豆 | 欧美成人aa大片拍拍拍 | 一区精品视频 | 国产亚洲美女精品久久久久狼 | 成人做爰小视频 | 男女乱淫真视频免费一级毛片 | 色噜噜狠狠色综合免费视频 | 99精品国产在现线免费 | 久久久久久岛国免费网站 | 一级特黄特色aa大片 | 婷婷丁香久久 | 婷婷 色天使| 成人特级毛片69免费观看 | 人人狠狠综合久久亚洲婷婷 | 99久久精品国产综合一区 | 另类重口性色老妇 | 九九久久久久久久爱 | 高清国产一区 | 亚洲qingse中文在线 | 国产精品99精品久久免费 | 四虎精品成人a在线观看 | 在线亚洲欧洲福利视频 | 国产毛片久久久久久国产毛片 | 国产九九视频在线观看 | 奇米影视播放器 | 女性毛片 | 精品国产一区二区三区四 | 全黄一级裸片视频免费区 | 深夜福利院 | 十大黄色免费网站 | 国产精品免费大片一区二区 | 精品国产线拍大陆久久尤物 | 亚洲国产成人九九综合 | 中文字幕在线免费视频 | 五月桃花网婷婷亚洲综合 | 久久免费大片 | 日本a一级毛片免费观看 | 久久97久久97精品免视看清纯 | 久久99国产精品免费观看 | 天天草人人草 | 成人欧美一区二区三区在线观看 |