CREATE TRIGGER 修改记录
ON URL_sl 
after UPDATE
AS
declare @a int, @minid int
SELECT  @a = COUNT(*)    from url_bak,Deleted where url_bak.id2=Deleted.URL_id--得到记录条数
select @minid=min(url_bak.id1) from  url_bak,Deleted where url_bak.id2=Deleted.URL_id
--得到符合条件的最小IDif @a < 5 --如果小于5条就在url_bak新加一条记录
         begin
         insert into URL_bak                           
               select URL_id,URL_name,URL_add,URL_class,CONVERT (char(16),getdate(),120),2 
               from Deleted
         end
else    --如果大于或等于5条就把url_bak里最小ID的记录替换掉
        begin
              update url_bak --问题出现的地方
              set  url_bak.name1=deleted.URL_name,
                     url_bak.add1=deleted.URL_add,
                     url_bak.calss1=deleted.URL_class,
                     url_bak.time1=CONVERT (char(16),getdate(),120)
              where
                      url_bak.id1=@minid
         end
我想问大家的是在UDATE的时候怎么引用deleted虚拟表里的内容,换我自己的写法提示“列前缀deleted与查询的的表名或别名不匹配”,我觉得问题应该是出在url_bak.name1=deleted.URL_name的时候,请大家指点。

解决方案 »

  1.   

    update url_bak --问题出现的地方
                  set  url_bak.name1=deleted.URL_name,
                         url_bak.add1=deleted.URL_add,
                         url_bak.calss1=deleted.URL_class,
                         url_bak.time1=CONVERT (char(16),getdate(),120)
    from url_bak,deleted 
                  where url_bak.表主键=deleted表主键
                          url_bak.id1=@minid加个 from