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有一段时间,在我们接触到的理论这么多东西的接触一直觉得非常深刻的方式。我会一直认为简单的CRUD能够解决眼前的问题。

我们将不再只有当我们学习一门新技术,会感觉。原来还有这样的事情。


posted @ 2015-12-02 20:26  mengfanrong  阅读(328)  评论(0编辑  收藏  举报