触发器学习_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:SQL SERVER数据库开发之存储过程应用
由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一定的帮助。 可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,

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

分享:详解SQL存储过程
前言 一直用ASP+ACCESS来编写网页和公司的内部应用系统,内部应用系统也就是大家说的OA吧,这个我也不知道,公司又叫它ERP,反正不管什么,它是用来帮助公司处理日常工作的,简化劳动的.从来没用过存储过程,所有的添加,删除,修改都是在ASP里面写程序执行,代码很多

来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2010-05-29
相关Mssql数据库教程