日期:2014-05-17  浏览次数:20983 次

在update触发器中如何使用修改前,后的数据?
1.在update触发器中如何使用修改前,后的数据?
   if   update(字段1)  
  begin  
  ...  
  end

有哪位大牛能告诉我上述 语法 什么意思? 最好把上面的语法 写出具体的代码,并加上注释! 我肯定是会给粉的!

------解决方案--------------------
新数据在 inserted 表
老数据在 deleted 表 

你去看下触发器的定义就明白了。
------解决方案--------------------
SQL code

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