insert into HBTrigger_EnglishNews select id, 'Update',@updateFields from Inser这一句中 se
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表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除或更改的所有行(可能不只一行)。
Inserted表存放由于执行Insert或Update语句而要向表中插入或更改的所有行(可能不只一行)。
[解决办法]
"for Update"是指当目标表被更新时触发执行此触发器的程序..
同理: "for delete","for insert"是指删除/插入记录时触发.
