触发器学习

      触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。

1:创建触发器
      Œ触发器可以在企业管理器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建。
  用 CREATE TRIGGER创建触发器

CREATE   TRIGGER  触发器名称
ON  表名
FOR   INSERT UPDATE  或  DELETE
AS
T
- SQL 语句
例:
USE  Northwind
CREATE   TRIGGER  Category_Delete
ON  Categories
FOR   DELETE
AS
UPDATE  P  SET  Discontinued  =   1
FROM  Products  AS  P  INNER   JOIN  deleted  AS  d
ON  P.CategoryID  =  d.CategoryID
可以使用IF UPDATE语句IF UPDATE (<column_name>)定义一个监视指定列的数据更新的触发器。这样,就可以让触发器容易的隔离出特定列的活动。
USE  Northwind
GO
CREATE   TRIGGER  Employee_Update
ON  Employees
FOR   UPDATE
AS
IF   UPDATE  (EmployeeID)
BEGIN  
RAISERROR  ( ' Transaction cannot be processed.\
***** Employee ID number cannot be modified.
' 10 1 )
ROLLBACK   TRANSACTION
END
可能你需要在视图上创建触发器,如果你按照以上例子的方法来创建的话,可能会出现“对象无效”的错误。在 SQL Server™ 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。实际上,我们不能在视图上创建 FOR 触发器,而应该创建 INSTEAD OF 触发器.每一个表或视图只能有一个INSTEAD OF触发器。不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。
create   trigger  触发器名
on  表名/视图
instead 
of   delete/update/insert
as
  SQL语句
2: 删除触发器

Œ用查询分析器删除
在查询分析器中使用 drop trigger 触发器名称 来删除触发器。也可以同时删除多个触发器:drop trigger 触发器名称,触发器名称...

USE  pubs
IF   EXISTS  ( SELECT  name  FROM  sysobjects
      
WHERE  name  =   ' employee_insupd '   AND  type  =   ' TR ' )//触发器是否存在
   
DROP   TRIGGER  employee_insupd
GO

用企业管理器删除
在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。

3:重命名触发器

Œ用查询分析器重命名

exec  sp_rename 原名称, 新名称

sp_rename 是 SQL Server™ 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。


用企业管理器重命名
在表上点右键->“所有任务”->“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击“确定”。

4:其他
触发器内部语句出错时,前面对数据更改操作将会无效。
触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。

CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。

  • ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
  • DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
  • DISK 语句,如:DISK INIT、DISK RESIZE。
  • LOAD 语句,如:LOAD DATABASE、LOAD LOG。
  • RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。
  • RECONFIGURE
  • 说明:有人说不能用 TRUNCATE TABLE 语句,其实是可以的。

你可能感兴趣的:(触发器)