一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 二: SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表。 一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约`束。 二: SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构 SQL Server触发器是数据库管理系统中的一种特殊程序,用于在特定的数据操作(如插入、更新或删除)发生时自动执行。这些操作通常是响应DML(数据操纵语言)语句,如INSERT、UPDATE和DELETE。触发器不能像普通存储过程那样被显式调用,而是作为数据库事件的响应自动执行,从而提供了在数据更改时执行复杂业务规则和完整性约束的机会。 SQL Server为每个触发器维护了两个内部表:Inserted和Deleted。这两个表在内存中,而非数据库中,它们的结构与触发器所关联的表相同。Inserted表存储由于INSERT或UPDATE操作将要插入或已修改的行,而Deleted表则保存因DELETE或UPDATE操作而将被删除或已修改的行。在触发器执行完毕后,这两个表会被系统自动清理。 SQL Server提供两种类型的触发器:Instead of 和 After。Instead of 触发器可以替代触发其执行的原始DML语句,允许在约束检查之前进行干预,这使得它能够用于扩展视图的可更新性。After 触发器则在DML语句执行并完成所有约束检查之后触发,主要用于执行额外的检查或操作,但不能绕过已存在的约束。 创建触发器的T-SQL语法如下: ```sql CREATE TRIGGER trigger_name ON {table_name | view_name} {FOR | AFTER | INSTEAD OF} [insert, update, delete] AS sql_statement ``` 删除触发器的命令为: ```sql DROP TRIGGER trigger_name ``` 查看现有触发器: ```sql USE database_name; GO SELECT * FROM sys.objects WHERE xtype = 'TR' ``` 或者查看特定触发器的定义: ```sql EXEC sp_helptext 'trigger_name' ``` 修改触发器的语法: ```sql ALTER TRIGGER trigger_name ON {table_name | view_name} {FOR | AFTER | INSTEAD OF} [insert, update, delete] AS sql_statement ``` 以下是一些示例: 1. 检查Orders表中插入的新订单是否对应的商品在goods表中的状态为1(正在整理),如果是,则阻止订单的插入。 ```sql CREATE TRIGGER orderinsert ON orders AFTER INSERT AS IF (SELECT status FROM goods, inserted WHERE goods.name = inserted.goodsname) = 1 BEGIN PRINT 'The goods is being processed' PRINT 'The order cannot be committed' ROLLBACK TRANSACTION -- 回滚,防止加入 END ``` 2. 在Orders表上创建一个插入触发器,每次添加订单时,相应减少Goods表中商品的库存。 ```sql CREATE TRIGGER orderinsert1 ON orders AFTER INSERT AS -- 示例代码未给出具体实现,通常会包含UPDATE语句来减少商品库存 ``` 触发器的使用应谨慎,因为它们可能会影响数据库性能,特别是在处理大量数据或频繁触发时。因此,明智地设计和优化触发器是确保数据库效率的关键。
- 粉丝: 11
- 资源: 958
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助