2016-05-26 23 views
1

私はSQL Serverが新しく、必要なトリガを作成するのに苦労しています。SQL Server:トリガ入力のトリガ

レコードが挿入される前に入力値を操作するテーブルがあります。

例テーブル:

MyTable 
( 
    [RUID] INT IDENTITY(1,1), 
    [CustomerName] nvarchar(200), 
    [CustomerStatus] INT, 
    [CustomerType] char(1), 
    [OtherFields] nvarchar(100) 
) 

挿入は以下のように来ることがあります。

INSERT INTO MyTable ([CustomerName], [CustomerStatus], [CustomerType], [OtherFields]) 
VALUES ('LName~FName', 2, 'A', 'Other Info') 

私たちは、その道を進んでいる(ベンダー製品の挿入を行うソースシステムの制御を持っていません数年後に経営陣はそれを変更させるために金額を費やすことを望んでいない)しかし、このようなことが起こる必要がある。 CustomerType 2倍の挿入値

ように挿入されている

CustomerStatus - に関係なく送信された値の、我々は他のすべての列は次のように残っている「B」

の値を上書きすることにしたいですです。

したがって、上記の例では値で送信され、挿入して、我々は実際にこれが表に終わるしたい:あなたが提供することができ

'LName~FName', 4, 'B', 'Other Info' 

任意の助けいただければ幸いです。

仕様:

  • のSQL Server 2008 R2 Standard Editionの(データベースはしかし、SQL Server 2000の互換モードである)
+0

CustomerTypeが常に「B」の場合、その列を計算列にするのはなぜですか。または、 'B'以外の値を挿入したい場合もあります(トリガーによっても上書きされます)。 – hatchet

+0

良い点ですが、この場合は実際の問題を大幅に簡略化しました。 テーブルは、キューに入っているすべての要求を単一のステータスにして、別のプロセスが来るまで待ってから、要求の処理を続行するかどうかをチェックするために、自動化キューです。バッチ・プロセスが完了すると、ステータスが変更され、自動化サーバーが要求を処理することがわかります。ステータスはまだ変更され、完了したとマークされます。 –

答えて

1

あなたは基本的に代わりにトリガの必要があります。コードは次のようになります...

CREATE TRIGGER tr_Insert_MyTable 
ON MyTable 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

INSERT INTO MyTable ([CustomerName], [CustomerStatus], [CustomerType], [OtherFields]) 
SELECT [CustomerName] 
    , [CustomerStatus] * 2 AS [CustomerStatus] 
    ,'B' [CustomerType] 
    , [OtherFields] 
FROM inserted 


END 
+0

ありがとうございます、私はこれがまさに私が探しているものだと思います。 –

関連する問題