设为首页 加入收藏

TOP

SQLServer---触发器
2015-07-24 10:40:34 来源: 作者: 【 】 浏览:1
Tags:SQLServer--- 触发器

今天第一次使用SQL Server中的触发器感觉很方便,本文将简单的向大家介绍一下SQL Server中的触发器以及其简单的使用。我会从其定义、原理、具体的用法分别大家讲述。

定义

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由某个事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。

原理

触发器可以查询其他表,而且可以包含复杂的SQL语句。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。

SQLServer包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。

DML触发器

数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。

DDL触发器

它是SqlServer2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。

登录触发器

登录触发器将为响应LOGON事件而激发存储过程。

具体用法

再敲机房收费系统的时候,在涉及到学生上下机的时候,我们就要对T_Line和T_Online这两张表进行操作,下机的时候我们需要删除T_Online表中的信息将它写入T_Line中。采用三层架构重构时,顿时觉得从一个表中得到数据返回U层再将其赋值给另一个实体当作参数最终传入另一张表中很是麻烦。于是我就想到了触发器。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<老牛>
-- Create date: <2014-6-2 15:28:00>
-- Description:	<删除正在上机的学生时同时将相关信
--                息添加到学生上机记录表中>
-- =============================================
CREATE TRIGGER [dbo].[triq_T_OnlineDelete]
   ON  [dbo].[T_Online] 
   instead of Insert
AS 
BEGIN
	declare @CardNo numeric(11, 0)
	declare @studentNo  numeric(11, 0)
	declare @studentName varchar(10)

	--获取参数信息
	select @CardNo=cardNo,@studentNo=studentNo ,@studentName=studentName from deleted 
	--添加学生上机记录
	insert into T_Line (cardNo,studentNo ,studentName ) values (@CardNo,@studentNo,@studentName)
	--删除正在上机的学生信息
	delete T_Online where cardNo =@CardNo
END
GO

(PS:上段代码(经测试正确)只用到了表中的几个字段其他字段也可用类似方法,特别要注意的是怎样获取下机时间(hh-mm-ss)和下机日期(yyyy-mm-dd),例如:Select CONVERT(varchar(100),GETDATE(), 24;Select CONVERT (varchar(10),getdate(),120))

心得体会

写到这里又想起了那句话“不将就是发现的原动力”,我们学习过程中也用到SQL Server一段时间了,之前我们也接触到了很多理论上的东西总感觉很高深的样子,总想着我会简单的增删改查就能解决目前的问题了。只有我们不再将就的时候我们学习了新的技术,才会感觉到,原来也就这么回事。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇对SqlHelper的理解 下一篇SQLServer如何导入excel

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)