在update触发器中如何使用修改前,后的数据?
1.在update触发器中如何使用修改前,后的数据?
if update(字段1)
begin
...
end
有哪位大牛能告诉我上述 语法 什么意思? 最好把上面的语法 写出具体的代码,并加上注释! 我肯定是会给粉的!
[解决办法]
新数据在 inserted 表
老数据在 deleted 表
你去看下触发器的定义就明白了。
[解决办法]
USE [tempdb]GOCREATE TABLE [dbo].[TEST]( [dtime] [datetime] NULL, [name] [nvarchar](50) NULL) ON [PRIMARY]GOcreate TRIGGER t_test ON dbo.test for insert,update --在插入、更新之后触发AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --inserted 插入的数据全部会存放在这里面 ,表结构与原表一样 --deleted 所有更新之前的数据或删除之前的数据全部存放在这里,表结构与原表一样 --如果插入的或者更新的是张三,则报错 if exists(select 1 from inserted where name='张三') begin RAISERROR ('不允许insert 张三',16,1) ROLLBACK tran begin tran endENDGOINSERT INTO TEST(dtime ,name )SELECT getdate(),'张三' --可以看到并没有插入INSERT INTO TEST(dtime ,name )SELECT getdate(),'张三1'SELECT * FROM TESTdrop table [TEST]--消息 50000,级别 16,状态 1,过程 t_test,第 15 行--不允许insert 张三--(1 行受影响)--(1 行受影响)--dtime name------------------------- ----------------------------------------------------2012-09-25 15:31:45.740 张三1--(1 行受影响)
[解决办法]
UPDATE触发器有两个临时表,inserted,delete