日期:2014-05-17 浏览次数:20983 次
USE [tempdb] GO CREATE TABLE [dbo].[TEST]( [dtime] [datetime] NULL, [name] [nvarchar](50) NULL ) ON [PRIMARY] GO create 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 end END GO INSERT INTO TEST(dtime ,name ) SELECT getdate(),'张三' --可以看到并没有插入 INSERT INTO TEST(dtime ,name ) SELECT getdate(),'张三1' SELECT * FROM TEST drop 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