WEB开发网
开发学院数据库MSSQL Server SQL Server数据库中使用触发器经验谈 阅读

SQL Server数据库中使用触发器经验谈

 2007-05-15 09:26:58 来源:WEB开发网   
核心提示: 语法IF UPDATE (<column_name>)例1本例阻止用户修改Employees表中的EmployeeID列,USE NorthwindGOCREATE TRIGGER Employee_UpdateON EmployeesFOR UPDATEASIF UPDATE

语法

IF UPDATE (<column_name>)

例1

本例阻止用户修改Employees表中的EmployeeID列。

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

INSTEAD OF触发器的工作过程

可以在表或视图上指定INSTEAD OF触发器。执行这种触发器就能够替代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每一种触发动作(INSERT、UPDATE或 DELETE),每一个表或视图只能有一个INSTEAD OF触发器。

INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于连接的视图上进行DELETE操作。然而,可以编写一个INSTEAD OF DELETE触发器来实现删除。上述触发器可以访问那些如果视图是一个真正的表时已经被删除的数据行。将被删除的行存储在一个名为deleted的工作表中,就像AFTER触发器一样。相似地,在UPDATE INSTEAD OF触发器或者INSERT INSTEAD OF触发器中,你可以访问inserted表中的新行。

不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。

示例

在本例中,创建了一个德国客户表和一个墨西哥客户表。放置在视图上的INSTEAD OF触发器将把更新操作重新定向到适当的基表上。这时发生的插入是对CustomersGer表的插入而不是对视图的插入。

创建两个包含客户数据的表:

SELECT * INTO CustomersGer FROM Customers
WHERE Customers.Country = 'Germany'
SELECT * INTO CustomersMex FROM Customers
WHERE Customers.Country = 'Mexico'
GO

在该数据上创建视图:

上一页  1 2 3 4  下一页

Tags:SQL Server 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接