马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
在Sql Server触发器中判断操作是Insert还是Update还是DeleteDECLARE
@IsInsert
bit,
@IsUpdate
bit,
@IsDelete
bit
IF
EXISTS(SELECT
1
FROM inserted) AND
NOT
EXISTS(SELECT
1
FROM deleted)
SET
@IsInsert
=
1
ELSE
SET
@IsInsert
=
0
IF
EXISTS(SELECT
1
FROM inserted) AND
EXISTS(SELECT
1
FROM deleted)
SET
@IsUpdate
=
1
ELSE
SET
@IsUpdate
=
0
IF
NOT
EXISTS(SELECT
1
FROM inserted) AND
EXISTS(SELECT
1
FROM deleted)
SET
@IsDelete
=
1
ELSE
SET
@IsDelete
=
0
create
trigger Update_Del on
Table
for
update,delete
as
if
not
exists(select
1
from inserted)
begin
/*inserted表无记录,是删除*/
end
else
begin
/*是更新*/
end
go
SQL server 2000中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
|