触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,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:删除触发器
USE
pubs
IF
EXISTS
(
SELECT
name
FROM
sysobjects
WHERE
name
=
'
employee_insupd
'
AND
type
=
'
TR
'
)//触发器是否存在
DROP
TRIGGER
employee_insupd
GO
exec
sp_rename原名称,新名称
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
USE
Northwind
GO
CREATE
TRIGGER
Employee_Update
ON
Employees
FOR
UPDATE
AS
IF
UPDATE
(EmployeeID)
BEGIN
RAISERROR
(
'
Transactioncannotbeprocessed.\
*****EmployeeIDnumbercannotbemodified.
'
,
10
,
1
)
ROLLBACK
TRANSACTION
END
create
trigger
触发器名
on
表名/视图
instead
of
delete/update/insert
as
SQL语句
Œ用查询分析器删除
在查询分析器中使用 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 语句,其实是可以的。
2535

被折叠的 条评论
为什么被折叠?



