zoukankan      html  css  js  c++  java
  • 数据库表新增触发器

    https://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

    以上是不错的数据库触发器博客,下面是我自己整理的一些,关于修改了表字段后,做一些判断的触发

    USE [Test]
    
    GO
    
    /****** Object: Table [dbo].[TestTrigger] Script Date: 2018/2/7 下午 02:47:29 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[TestTrigger](
    [ID] [INT] IDENTITY(1,1) NOT NULL,
    [TestInt] [INT] NULL,
    [TestNvarchar] [NVARCHAR](50) NULL,
    [TestDate] [DATETIME] NULL,
    CONSTRAINT [PK_TestTrigger] PRIMARY KEY CLUSTERED
    (
    [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
     
    
    --创建insert插入类型触发器
    if (object_id('tgr_TestTrigger_insert', 'tr') is not null)
    drop trigger tgr_TestTrigger_insert
    go
    create trigger tgr_TestTrigger_insert
    on TestTrigger
    for insert --插入触发
    as
    --定义变量
    declare @ID int, @TestInt int, @TestNvarchar NVARCHAR(50),@TestDate DATE;
    --在inserted表中查询已经插入记录信息
    select @ID = ID, @TestInt = TestInt,@TestNvarchar=TestNvarchar,@TestDate=TestDate from inserted;
    IF(@TestNvarchar=N'b')
    BEGIN
    INSERT INTO [dbo].[TestTriggerStory](TestInt,TestNvarchar,TestDate) SELECT TestInt,TestNvarchar,TestDate FROM inserted;
    END
    
    go
    --创建insert插入类型触发器
    if (object_id('tgr_TestTrigger_update', 'tr') is not null)
    drop trigger tgr_TestTrigger_update
    go
    create trigger tgr_TestTrigger_update
    on TestTrigger
    for update --插入触发
    AS
    
    --定义变量
    declare @ID int, @TestInt int, @TestNvarchar NVARCHAR(50),@TestDate DATE,
    @IDNew int, @TestIntNew int, @TestNvarcharNew NVARCHAR(50),@TestDateNew DATE;
    --查看更新前的数据
    select @ID = ID, @TestInt = TestInt,@TestNvarchar=TestNvarchar,@TestDate=TestDate FROM Deleted ;
    --PRINT @TestNvarchar
    IF(@TestNvarchar<>N'b')
    BEGIN
    PRINT '触发了1'
    select @IDNew = ID, @TestIntNew = TestInt,@TestNvarcharNew=TestNvarchar,@TestDateNew=TestDate FROM inserted ;
    IF(@TestNvarcharNew=N'b')
    BEGIN
    INSERT INTO [dbo].[TestTriggerStory](TestInt,TestNvarchar,TestDate) SELECT TestInt,TestNvarchar,TestDate FROM inserted;
    PRINT '触发了2'
    END
    END
     
    
    INSERT INTO dbo.TestTrigger
    ( TestInt, TestNvarchar, TestDate )
    VALUES ( 0, -- TestInt - int
    N'b', -- TestNvarchar - nvarchar(50)
    GETDATE() -- TestDate - datetime
    )
    
     
    
    SELECT * FROM dbo.TestTrigger
    
    UPDATE dbo.TestTrigger SET TestNvarchar=N'b' WHERE ID=1
  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/shexunyu/p/8426628.html
Copyright © 2011-2022 走看看