触发器 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:对列更新操作的判断的两个函数
eg:
对Order_Details表中的Quantity和UnitPrice做检测是否被修改
拿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分别在第三位和第四位
当对某张表建立触发器后,分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分别在第三位和第四位
相关文章推荐
- 【原】[SQL Server] TRIGGER 触发器获得insert, delete, update行的信息
- 关于mysql中insert、update、delete的触发器(跨库操作)
- [转]MSSQL数据库触发器--更新(update),删除(delete),插入(insert)
- TRIGGER 触发器获得insert, delete, update行的信息
- SQLSERVER触发器内INSERT,UPDATE,DELETE三种状态
- SQL 表的Insert ,update ,delete 触发器
- 创建INSERT、DELETE、UPDATE 触发器示例
- 在SqlServer2008R2中,在一张表上加上insert、update、delete触发器(带游标)
- 触发器 通用(insert,update,delete)
- 1, insert触发器; 2, update触发器; 3, delete触发器;
- 触发器中判断操作是Insert还是Update还是Delete
- 一个触发器内三种INSERT,UPDATE,DELETE状态
- [SQL Server] TRIGGER 触发器获得insert, delete, update行的信息
- sqlserver2005新增功能:服务器级别触发器的创建(除了insert,update,delete)-引用
- 触发器记录表某一个字段数据变化的日志 包括插入insert 修改update 删除delete 操作
- SQL Server:触发器品读 -- Insert、 Delete、 Update(“updated ”是不存在的,不能想当然)
- SQLSERVER触发器内INSERT,UPDATE,DELETE三种状态
- 触发器 判断insert , update ,delete 的方法
- Insert , Update , Delete 触发器
- mysql 触发器的使用 FOR INSERT,DELETE,UPDATE