2011-10-25 47 views
1

我正在使用SQL Server 2005的觸發器。我有更新後的表的觸發器。聲明變量後,代碼就是這樣。插入問題後的SQl觸發器

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 @[email protected]_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 shoule只能一次插入。我如何做到這一點。請幫助我,提前謝謝!

+0

給出觸發器的完整代碼 –

回答

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

每次有更新時都會執行該代碼,因爲您沒有有條件的流程來阻止它有時執行。如果您只想執行給定條件,則需要將其包裝在IF塊中。

你說:「這個reg_code只在插入行時插入一次,但每次更新表時它都會改變。」那麼爲什麼在AFTER UPDATE觸發器呢?它看起來應該在AFTER INSERT觸發器中。除非我誤解你。

+0

觸發器中有很多其他語句,應在每次更新後運行。所以我爲插入後創建了一個新的觸發器。它運行良好。感謝您的領導:) – Ram

+0

@Ram樂於幫助! :) – 2011-10-25 14:10:26

0

好吧,你非常麻煩觸發器。首先你需要顯示實際的創建觸發代碼。我懷疑你沒有正確設置只在插入時觸發。

接下來,您需要假設觸發器必須能夠處理多個記錄插入。無論何時,當你在觸發器中爲標量變量設置一個值時,你可能做錯了什麼。這不可能是你的全部觸發器,因爲你沒有展示你如何得到可變值。