Ms SQL Server 触发器
插入触发器 :
create TRIGGER [MediaClassCount_Insert]
ON [dbo].[MediaInfo]
AFTER INSERT
AS
BEGIN
insert into dbo.MediaClassCount(ActiveID,MediaInfoID,Class,FileType) values((select ActiveID from inserted),(select ID from inserted),(select FileType from inserted),'1')
end
END
删除触发器 :
ALTER TRIGGER [MediaClassCount_DELETE]
ON [dbo].[MediaInfo]
AFTER DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @MediaInfoID int
delete from dbo.MediaClassCount
where [MediaInfoID]= (select ID from DELETED)
END
UPDATE触发器的工作过程
可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和捕获数据后像(after image)的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。
触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。
可以使用IF 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