SQL Server---触发器

        今天第一次使用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一段时间了,之前我们也接触到了很多理论上的东西总感觉很高深的样子,总想着我会简单的增删改查就能解决目前的问题了。只有我们不再将就的时候我们学习了新的技术,才会感觉到,原来也就这么回事。


SQL Server---触发器,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。