2012-05-12 12 views
4

SQL Serverにトリガーの後にトリガーがあることがわかりました。また、挿入されたペスード・テーブルの値を変更することはできません。私のテーブルに挿入されるデータをチェックし、データが自分の制約に違反した場合、これらの値をデフォルト値に変更する必要があります。どうすればいいですか?挿入後に値を更新するのはどうですか?しかし、テーブルにユニークな主キーまたは列がない場合は、挿入した行を見つけて更新するにはどうすればよいですか?T-SQL挿入前の値を変更する方法

+2

「INSTEAD OF」トリガのポイントは、その操作(「INSERT」など)を「取得」して、通常の操作ではなく*何かを行うことができることです。そこで、値を読み込み、変更して、INSERTの中でINSERTを呼び出して、変更されたデータを挿入することができます。 –

+0

この問題は、テーブル構造が変更された場合、トリガーも同様です。代わりにOracleでは、「挿入された」オブジェクト(「new」)と同等のものを更新することができます。これははるかに論理的です。 –

答えて

11

基本的には、INSTEAD OF INSERTトリガーで、あなたが探しているものを達成することができます - ちょうどだからあなたのトリガが見える、INSERTED擬似テーブルからデータを読み出し、それを変更し、テーブル

に挿入します

CREATE TRIGGER YourTrigger ON dbo.YourTable  
INSTEAD OF INSERT 
AS 
    SET NOCOUNT ON 

    -- do the INSERT based on the INSERTED pseudo table, modify data as needed 
    INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN) 
     SELECT 
      Col1, 2 * Col2, ....., N * ColN 
     FROM 
      INSERTED 

もちろん、次のように追加することもできます。例えば、SELECT .... FROM INSERTEDという文にWHERE節の形式でチェックします。特定の行を無視する - 可能性は無限大です!

+0

ありがとうございました。それは実際に動作します。 :-) – tmj

関連する問題