该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处。

触发器要实现的功能:

(1)获取对表Table1数据操作操作类型(insert、delete或update)。

(2)将表修改后的数据保存到表Table2(该表结构与Table1表结构类似)。

例如:

1>向表Table1添加数据1,表保存后,将数据1添加到表Table2,并将操作类型:insert,保存到表Table2的ChangeType列。

2>修改表Table1,将数据1改成数据2,表保存后,将数据2添加到表Table2,并将操作类型:update,保存到表Table2的ChangeType列。

3>删除表Table1数据1,表保存后,将数据2添加到表Table2,并将操作类型:delete,保存到表Table2的ChangeType列。

表结构:

(1)表Table1

 CREATE TABLE Table1(
[ID] [BIGINT] IDENTITY(1,1) NOT NULL,
[Name] [NVARCHAR](20) NULL,
[Sex] [NVARCHAR](2) NULL,
[Address] [NVARCHAR](50) NULL,
[Age] [INT] NULL,
[Birthday] [DATE] NULL
) ON [PRIMARY]

(2)表Table2

 CREATE TABLE Table2(
[ID] [BIGINT] IDENTITY(1,1) NOT NULL,
[Name] [NVARCHAR](20) NULL,
[Sex] [NVARCHAR](2) NULL,
[Address] [NVARCHAR](50) NULL,
[Age] [INT] NULL,
[Birthday] [DATE] NULL,
[ChangeType] [NVARCHAR](50) NOT NULL
) ON [PRIMARY]

触发器Tri_Table1

 CREATE  TRIGGER [Tri_Table1] ON [Table1]
--After触发器,对表进行insert、delete、update后触发
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
BEGIN TRY
BEGIN TRAN;
DECLARE @maxID NVARCHAR(50) ,
@inserted INT ,
@deleted INT ,
@ChangeType NVARCHAR(20);
SELECT @inserted = COUNT(1)
FROM Inserted;
SELECT @deleted = COUNT(1)
FROM Deleted;
--判断对表Table1的操作类型
IF @inserted > 0
AND @deleted = 0
BEGIN
SET @ChangeType = 'INSERT';
END;
ELSE
IF @inserted > 0
AND @deleted > 0
BEGIN
SET @ChangeType = 'UPDATE';
END;
ELSE
IF @inserted = 0
AND @deleted > 0
BEGIN
SET @ChangeType = 'DELETE';
END;
IF @ChangeType = 'DELETE'
BEGIN
SELECT @maxID = Id
FROM Deleted;
--如果对Table1同一条数据,进行多次操作,则Table2只保存最新数据
IF EXISTS ( SELECT COUNT(1)
FROM Table2
WHERE Id = @maxID )
BEGIN
DELETE FROM Table2
WHERE Id = @maxID;
END;
INSERT INTO Table2
(
)
SELECT ID,
Name,
Sex,
Address,
Age,
Birthday,
@ChangeType AS ChangeType
FROM Deleted;
END;
ELSE
BEGIN
SELECT @maxID = Id
FROM Inserted;
IF EXISTS ( SELECT COUNT(1)
FROM Table2
WHERE Id = @maxID )
BEGIN
DELETE FROM Table2
WHERE Id = @maxID;
END;
INSERT INTO Table2
(
ID,
Name,
Sex,
Address,
Age,
Birthday,
ChangeType
)
SELECT ID,
Name,
Sex,
Address,
Age,
Birthday,
@ChangeType AS ChangeType
FROM Inserted
END;
COMMIT TRAN;
END TRY
BEGIN CATCH
IF XACT_STATE() = -1
ROLLBACK TRAN;
END CATCH;
END;

SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表的更多相关文章

  1. php5.4以上 mysqli 实例操作mysql 增,删,改,查

    <?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...

  2. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. [MySQL数据库之记录的详细操作:增、改、删、单表查询、多表查询]

    [MySQL数据库之记录的详细操作:增.改.删.单表查询.多表查询] 记录详细操作 增.删.改 增: insert t1(字段1,字段2,字段3) values (值1,值2,值3), (值1,值2, ...

  4. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  5. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  6. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  7. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  8. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  9. 【转】Android 增,删,改,查 通讯录中的联系人

    一.权限 操作通讯录必须在AndroidManifest.xml中先添加2个权限, <uses-permission android:name="android.permission. ...

随机推荐

  1. yii模块下面的组件

    模块的定义就不写了,直接进入主题看目录和文件: application/modules/client/controllers/UserController.php <?php class Use ...

  2. python莫名其妙的yield, yield from, yield.send

    练了几行代码, 慢慢找感觉. TASK,多线程,异步,很多地方都用到的呢. #!/usr/bin/env python # -*- coding: utf-8 -*- import time from ...

  3. Google之Chromium浏览器源码学习——base公共通用库(三)

    本节将介绍base公共通用库中的containers,其包含堆栈.列表.集合.以及Most Recently Used cache(最近使用缓存模板). linked_list.h:一个简单的列表类型 ...

  4. Oracle 11g 新特性之Highly Available IP(HAIP)

    Redundant Interconnect with Highly Available IP (HAIP) 简介   从11.2.0.2开始,Oracle 的集群软件Grid Infrastruct ...

  5. hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法

    一.HDFS概述         优点:高容错性.适合批处理.适合大数据处理.流式文件访问:一次写入,多次读取.         缺点:不适合低延迟数据访问.不适合小文件存取(受限于NameNode) ...

  6. winform TreeView的一些用法以及异步加载

    今天,主要弄了一下对于树型控件的一些方法,以及异步加载.参考: http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treevie ...

  7. sysbench的安装与使用(with MySQL)

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 项目主页: http://sysbench.sourceforge.net/ 安装文档htt ...

  8. MEF Parts Sample

    namespace Microshaoft.MEF.Contracts { using System; public delegate void ExceptionEventHandler<TS ...

  9. Java基础知识点3:集合类

    集合类是Java编程中经常会用到的一类常用类库,在这里将会对整个集合类进行介绍: Collection接口: Collection接口是所有集合类的根接口,代表了所有含有多个元素的集合,无论这个集合中 ...

  10. Java动态、重写 理解

    相关类: class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A ...