这一句中 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表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。