日期:2014-05-17 浏览次数:21102 次
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