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

    --触发器学习
    -------------------------------------------------------------------------------after 触发器-------------------------------------------------------------------------------
    --1 insert 触发器
    IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_insert')
    DROP TRIGGER tgr_tablename_insert
    GO
    CREATE TRIGGER tgr_tablename_insert
    ON dbo.TB_HR_SatisfactionEvaluation_Quota
    --插入数据触发
    FOR INSERT
    AS
    --触发执行的操作
    INSERT INTO dbo.TB_HR_SatisfactionEvaluation_Quota( EvaluationYear ,EvaluationType ,LocationName ,DescVal ,DeptName ,EvaluationDesc ,enable ,createby ,CreateTime ,updateby ,updateTime)
    VALUES('2017','test01','test01',123,'test01','test01',1,1,GETDATE(),1,GETDATE())
    GO

    --2 delete 触发器
    IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_delete')
    DROP TRIGGER tgr_tablename_delete
    GO
    CREATE TRIGGER tgr_tablename_delete
    ON dbo.TB_HR_SatisfactionEvaluation_Quota
    FOR DELETE
    AS
    --触发执行执行的操作
    --DELETE FROM dbo.TB_HR_SatisfactionEvaluation_Quota WHERE CreateTime='2017-07-31' AND LocationName='test01'
    PRINT '备份数据中...'

    IF(OBJECT_ID('BackupTest')IS NOT NULL)
    BEGIN

    INSERT INTO BackupTest
    SELECT
    EvaluationYear ,
    EvaluationType ,
    LocationName ,
    DescVal ,
    DeptName ,
    EvaluationDesc ,
    enable ,
    createby ,
    CreateTime ,
    updateby ,
    updateTime
    FROM Deleted;
    END
    ELSE
    BEGIN
    SELECT * INTO BackupTest FROM Deleted
    END

    PRINT '数据备份成功!'
    GO


    --3 update触发器
    IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_update')
    DROP TRIGGER tgr_tablename_update
    GO
    CREATE TRIGGER tgr_tablename_update
    ON dbo.TB_HR_SatisfactionEvaluation_Quota
    FOR UPDATE
    AS
    --触发器要执行的操作 inserted表 deleted表

    --inserted表中的数据
    INSERT INTO dbo.BackupTest SELECT
    Inserted.EvaluationYear ,
    Inserted.EvaluationType ,
    Inserted.LocationName ,
    Inserted.DescVal ,
    Inserted.DeptName ,
    Inserted.EvaluationDesc ,
    Inserted.enable ,
    Inserted.createby ,
    Inserted.CreateTime ,
    Inserted.updateby ,
    Inserted.updateTime FROM Inserted
    --deleted表中的数据
    INSERT INTO dbo.BackupTest SELECT
    Deleted.EvaluationYear ,
    Deleted.EvaluationType ,
    Deleted.LocationName ,
    Deleted.DescVal ,
    Deleted.DeptName ,
    Deleted.EvaluationDesc ,
    Deleted.enable ,
    Deleted.createby ,
    Deleted.CreateTime ,
    Deleted.updateby ,
    Deleted.updateTime FROM Deleted
    GO
    -------------------------------------------------------------------------------after 触发器-------------------------------------------------------------------------------


    -------------------------------------------------------------------------------instead of 触发器-------------------------------------------------------------------------------
    /*
    instead of 触发器 不执行相应的update delete insert 操作,执行的只是触发器本身的脚本
    */
    IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_insteadOf')
    DROP TRIGGER tgr_tablename_insteadOf
    GO
    CREATE TRIGGER tgr_tablename_insteadOf
    ON dbo.TB_HR_SatisfactionEvaluation_Quota INSTEAD OF DELETE /*update insert*/
    AS
    DECLARE @LocationName NVARCHAR(50)=''
    SELECT @LocationName=Deleted.LocationName FROM Deleted
    PRINT 'LocationName是'+@LocationName
    --暂时不删除数据的
    DELETE FROM dbo.TB_HR_SatisfactionEvaluation_Quota WHERE LocationName='test01'
    GO

    -------------------------------------------------------------------------------instead of 触发器-------------------------------------------------------------------------------

    --显示自定义消息 raiseError
    IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_messager')
    DROP TRIGGER tgr_messager
    GO
    CREATE TRIGGER tgr_messager
    ON dbo.TB_HR_SatisfactionEvaluation_Quota
    AFTER INSERT,DELETE
    AS
    RAISERROR('tgr_messager触发器被触发执行',16,10)
    GO


    ---启用 禁用触发器
    DISABLE TRIGGER tgr_messager ON dbo.TB_HR_SatisfactionEvaluation_Quota;
    ENABLE TRIGGER tgr_messager ON dbo.TB_HR_SatisfactionEvaluation_Quota;

    --查看已经存在的触发器
    SELECT * FROM sys.triggers
    SELECT * FROM sys.objects WHERE type='TR'

  • 相关阅读:
    synchronized使用及java中的原子性问题
    Volatile 原理及使用,java并发中的可见性问题
    final 修饰符
    java 常见OPTS参数的含义
    Redis面试题
    Count(1),Count(*),Count(column)区别
    Mysql索引创建及删除
    springboot 非端口模式启动
    sql批量插入缓慢
    sql server sql语句导入数据到execl2007中
  • 原文地址:https://www.cnblogs.com/yachao1120/p/7264419.html
Copyright © 2011-2022 走看看