2011-10-25 23 views
1

SQLサーバー2005を使用してトリガーを処理しています。更新後のテーブルのトリガーがあります。変数を宣言した後、コードは次のようになります。挿入後のSQ1トリガー

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 

行が挿入されているが、それはテーブルの更新があるたびに変化している場合、このreg_code一度だけ挿入さshoule

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

の最後の部分。どうすればそれが起こるのですか?助けてください、先にありがとう!

+0

トリガーの完全なコードを指定してください –

答えて

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

時々実行することを妨げる条件付きフローがないため、このコードは更新があるたびに実行されます。特定の条件を指定して実行する場合は、ブロックIFにラップする必要があります。

あなたは言う:「このreg_code shouleは、行が挿入されたときに1回だけ挿入されますが、テーブルの更新があるたびに変更されます。なぜそれがAFTER UPDATEのトリガーの中にあるのですか?それはAFTER INSERTトリガーのように見えます。私があなたを誤解していない限り。

+0

トリガーには、各アップデート後に実行する必要がある他のステートメントがたくさんあります。だから私は挿入後に新しいトリガーを作成しました。それは正常に働いた。ヘッドアップありがとう:) – Ram

+0

@ラムは助けてうれしい! :) –

0

あなたは非常にトリガーに問題があります。最初に、実際の作成トリガコードを表示する必要があります。私はあなたが正しくセットされていないことを疑う。

次に、トリガーが複数のレコード挿入を処理できる必要があると仮定する必要があります。トリガー内のスカラー変数に値を設定しているときは、何か間違っている可能性があります。これは、あなたがどのように可変的な値を得るかを示していないので、あなたの全体の引き金になることはありません。

関連する問題