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

insert into HBTrigger_EnglishNews select id, 'Update', @updateFields from Inser

这一句中 select id, 'Update',  @updateFields from Inserted 不理解,请解释下
insert into HBTrigger_EnglishNews select id, 'Update',  @updateFields from Inserted


完整


Create Trigger HBTrigger_EnglishNews_Update
    On EnglishNews                        
    for Update                         

    As                                       
    DECLARE @updateFields nvarchar(4000)  //声明一个变量
    set @updateFields = ''

    if Update(GroupId)            //下边都是记录更新的字段
    begin
    set @updateFields = @updateFields + 'GroupId,'
    end       

    if Update(SiteId)          
    begin
    set @updateFields = @updateFields + 'SiteId,'
    end       

    if Update(Time)          
    begin
    set @updateFields = @updateFields + 'Time,'
    end       

    if Update(Title)          
    begin
    set @updateFields = @updateFields + 'Title,'
    end       

    if Update(Content)          
    begin
    set @updateFields = @updateFields + 'Content,'
    end   

    if @updateFields <> ''
    begin
    insert into HBTrigger_EnglishNews select id, 'Update',  @updateFields from Inserted
    end


------解决方案--------------------

select id, 'Update',  @updateFields from Inserted

返回一个表,
第一个字段值为Inserted表[id]字段的值.
第二个字段值固定为字符串"Update".
第三个字段值固定为变量@updateFields的值.

------解决方案--------------------
Inserted表是触发器中的虚表,存放修改或者插入后的纪录
'Update'固定字符串作为第二个字段
@updateFields 变量作为第三个字段
------解决方案--------------------
SQL Server为每个触发器都创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行&nbs