您的位置:首页 > 其它

触发器 Insert Delete Update

2009-11-19 11:17 447 查看
Inserted Deleted为临时表,驻留在内存中

当对某张表建立触发器后,分3种情况讨论
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据
2.删除操作(Delete)
Inserted表无数据,Deleted表有数据
3.更新操作(Update)

Inserted表有数据(新数据),Deleted表有数据(旧数据)

对行记录的判断应该用到Inserted表和Deleted表

ps:对列更新操作的判断的两个函数
COLUMNS_UPDATED()
UPDATE(列名)


UPDATE(列名)
是为了判断单一列是否被INSERT或是UPDATE语句修改过,返回true或false

COLUMNS_UPDATED()
是对多个列是否被INSERT或是UPDATE语句修改的判断,返回的是位掩码,读取的顺序是从左到右,和一般的二进制读取顺序正好相反

eg:

对Order_Details表中的Quantity和UnitPrice做检测是否被修改

CREATE TRIGGER tr_OrderDetails ON [Order_Details] AFTER UPDATE
AS
IF (COLUMNS_UPDATED() = 12)
BEGIN
RAISERROR (''''Cannot change both UnitPrice and Quantity at the
same time'''', 16, 1)
ROLLBACK TRAN
END
GO


拿Order_Details表来说,COLUMN_UPDATED功能返回代表Order_Details表中字段的五个字节。只要第三和第四个字段被修改,上面这种情况就会发生,它检测这些位是不是已赋值为1.当第三和第四位都修改的话,它就如:00110。因这个位掩码代表2次幂,第一位表示1,第二位表示2,第三位表示4,第四位表示8,第五位表示16(是的,这是和正常二进制数相反的顺序);因此只表示UnitPrice和Quantity字段被修改位掩码的值为00110,这个值为12(4+8)。

ps,这个Order_Details表共有5个字段,Quantity和UnitPrice分别在第三位和第四位
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: