触发器学习

触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,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 ( ' Transactioncannotbeprocessed.\
*****EmployeeIDnumbercannotbemodified.
' , 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 语句,其实是可以的。


阿胜 2008-03-05 16:32 发表评论

你可能感兴趣的:(sql,sql,编程,server,活动,Go)