我正在使用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应仅插入一次,但每次对表进行更新时它都会更改。我该如何实现呢?请帮帮我,谢谢你!!
答案 0 :(得分:0)
update merchant
set reg_code = @alpha_numeric
where merchantid = @merchantid
每次有更新时都会执行该代码,因为您没有条件流阻止它有时执行。如果您只想在给定某个条件的情况下执行该操作,则需要将其包装在IF
块中。
你说:“这个reg_code shoule只在插入行时插入一次,但每次对表格进行更新时它都会改变。”为什么在AFTER UPDATE
触发器中呢?它看起来应该在AFTER INSERT
触发器中。除非我误解了你。
答案 1 :(得分:0)
好的,你的触发器非常麻烦。首先,您需要显示实际的创建触发器代码。我怀疑你没有正确设置只在插入时触发。
接下来,您需要假设触发器必须能够处理多个记录插入。无论何时将值设置为触发器中的标量变量,您可能都会做错事。这可能不是你的整个触发器,因为你没有显示你如何获得变量值。