插入问题后触发SQl

时间:2011-10-25 13:34:04

标签: sql-server-2005

我正在使用SQL Server 2005处理触发器。我有一个更新后的表的触发器。声明变量后,代码就是这样。

if @isconfirmed_before = 0 and @isconfirmed_after = 1
begin

if @invite_userid <> ''
        begin

            select @points = points from dbo.InvitePoint where code = 'USR' and packageid = @packageid
            INSERT INTO InviteCount
                   ([userID]
                   ,[joinMerchantID]
                   ,[packageID]
                   ,[points]
                   ,[joinDate])
             VALUES
                   (@invite_userid
                   ,@merchantid
                   ,@packageid
                   ,@points
                   ,getdate())
        end

 SET @alpha_numeric=''
        SELECT @alpha_numeric=@alpha_numeric+CHAR(n) FROM
        (
            SELECT TOP 8 number AS n FROM master..spt_values
            WHERE TYPE='p' and (number between 48 and 57 or number between 65 and 90)
            ORDER BY NEWID()
        ) AS t 

        update merchant
        set reg_code = @alpha_numeric
        where merchantid = @merchantid

END

的最后一部分
    update merchant  
    set reg_code = @alpha_numeric
    where merchantid = @merchantid

当插入行时,此reg_code应仅插入一次,但每次对表进行更新时它都会更改。我该如何实现呢?请帮帮我,谢谢你!!

2 个答案:

答案 0 :(得分:0)

update merchant   
set reg_code = @alpha_numeric 
where merchantid = @merchantid 

每次有更新时都会执行该代码,因为您没有条件流阻止它有时执行。如果您只想在给定某个条件的情况下执行该操作,则需要将其包装在IF块中。

你说:“这个reg_code shoule只在插入行时插入一次,但每次对表格进行更新时它都会改变。”为什么在AFTER UPDATE触发器中呢?它看起来应该在AFTER INSERT触发器中。除非我误解了你。

答案 1 :(得分:0)

好的,你的触发器非常麻烦。首先,您需要显示实际的创建触发器代码。我怀疑你没有正确设置只在插入时触发。

接下来,您需要假设触发器必须能够处理多个记录插入。无论何时将值设置为触发器中的标量变量,您可能都会做错事。这可能不是你的整个触发器,因为你没有显示你如何获得变量值。