Sql Server触发器的使用

Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同,触发器执行完成后,与该触发器相关的这两个表也被删除。



















对表的操作

Inserted逻辑表

Deleted逻辑表

增加记录(insert)

存放增加的记录

删除记录(delete)

存放被删除的记录

修改记录(update)

存放更新后的记录

存放更新前的记录

三、for、after、instead of触发器

after:触发器在触发它们的语句完成后执行。如果该语句因错误而失败,触发器将不会执行。不能为视图指定after触发器,只能为表指定该触发器。可以为每个触发操作(insert、update、delete)指定多个after触发器。如果表有多个after触发器,可使用sp_settriggerorder定义哪个after触发器最先激发,哪个最后激发。除第一个和最后一个触发器外,所有其他的after触发器的激发顺序不确定,并且无法控制。

for:等同于after

instead of:该触发器代替触发操作执行。可在表和视图上指定instead of触发器。只能为每个触发操作(insert、update、delete)定义一个instead of触发器。instead of触发器可用于对insert和update语句中提供的数据值执行增强的完整性检查。

四、 触发器的使用

1、创建触发器:

create trigger trigger_name

on {table_name | view_name}

{for| After | Instead of }

[ insert, update,delete ]

as

sql_statement

2、删除触发器:

drop trigger trigger_name

3、查看数据库中已有的触发器:

select * from sysobjects where xtype='TR'

4、查看单个触发器:

exec sp_helptext '触发器名'

5、修改触发器:

alter trigger trigger_name

on {table_name | view_name}

{for| After | Instead of }

[ insert, update,delete ]

as

sql_statement

五、触发器的实例

1、在Orders表中建立触发器,当向Orders表中插入一条记录时,检查goods表的货品状态status是否为1。是,则不能往Orders表加入该订单。

if (object_id('tgr_orders_insert', 'tr') is not null)
    drop trigger [tgr_orders_insert];
go
create trigger [tgr_orders_insert]
on [orders]
after insert
as 
if (select [status] from [goods],[inserted] where [goods].name=[inserted].name)=1
begin
    print 'the goods is being processed'
    print 'the order cannot be committed'    
    rollback transaction   --回滚﹐避免加入

end

(0)

相关推荐

  • SQL SERVER中各类触发器的完整语法及参数说明

    语法: Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE

  • SQLSever中的触发器基本语法与作用

    什么是触发器? 触发器是在对表进行插入.更新或删除操作时自动执行的存储过程. 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:update.insert.delete这些操作的时候,系统会自动调用执行该表上对应的触发器.SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有cre

  • SQL Server 触发器 表的特定字段更新时,触发Update触发器

    复制代码 代码如下: create trigger TR_MasterTable_Update on MasterTable after update as if update ([Type])--当Type字段被更新时,才会触发此触发器 insert into MasterLogTable select Id ,(Case [Type] when 1 then 'Type1' when 2 then 'Type2' when 3 then 'Type3' when 4 then 'Type4'

  • sqlserver 触发器教程

    主类别表名:Navtion_TopSubject 主键fTopID Char(36) 次类别表名:Navtion_NodeSubject 外键同上 内容表名:tText 外键同上 复制代码 代码如下: // ------------- 代码开始 -------------------- CREATE TRIGGER [RemoveTopAndNodeText] ON [dbo].[Navtion_TopSubject] INSTEAD OF DELETE AS /* 定义触发器使用的变量 */

  • sqlserver 触发器实例代码

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: 复制代码 代码如下: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表

  • 在登录触发器错误情况下连接SQL Server的方法

    错误如图所示: 图一 如果不能很好地执行登录触发器,那么将会导致登录失败. 例如,如果创建了这个触发器,那么就可以设计下面的代码来达到失败的目的. 复制代码 代码如下: CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON AS BEGIN INSERT INTO BadDB.dbo.SomeTable VALUES ('Test'); END; GO 没有一个数据库称为BadDB,这意味着在BadDB内也没有一张表叫SomeTable.因

  • SQL SERVER 触发器介绍

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:update.insert.delete这些操作的时候,系统会自动调用执行该表上对应的触发器.SQL Server 2005中触发器可以分为两类:DM

  • SQLServer触发器创建、删除、修改、查看示例代码

    一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表.这两个表. 一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二: SQL Server为每个触发器都创建了两个专用表:Inse

  • SQL Server触发器及触发器中的事务学习

    如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事.在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器 & DDL触发器)和After触发器 &  Instead Of 触发器的应用不同,开始说起它们,然后是说与事务有关的故事.如果,你有什么建议和意见,都可以通过文章后面的回复与我沟通,或者通过E-Mail方式,与 我交流:我的Email地址是:glal@163.co

  • 用sql脚本创建sqlserver数据库触发器范例语句

    复制代码 代码如下: --会员表 if object_id('userinfo','u') is not null drop table userinfo go create table userinfo(userid int primary key,user_tegral int,level int) insert into userinfo select 1,0,0 go --会员等级表 if object_id('userlevel','u') is not null drop table

  • sqlserver 禁用触发器和启用触发器的语句

    --禁用 复制代码 代码如下: alter table tb disable trigger tir_name --啟用 复制代码 代码如下: alter table tb enable trigger tir_name

  • sqlserver中触发器+游标操作实现

    复制代码 代码如下: Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明一个tri_wk_CSVHead_History触发器, instead of insert ---插入操作被代替执行下面的操作 as begin declare YB cursor --声明一个游标 for select NoteNO from inserted--这里的NoteNO要和下面的匹配 open YB declare @NoteNO

随机推荐