2016-05-20 18 views
1

私は2つのテーブルがあります。別のテーブルの行を更新するトリガを書き込む方法は?

CREATE TABLE EventsCnfig 
(
Id int, 
InspectionId int, 
Event int 
); 

そして、この:EventsCnfig表に

CREATE TABLE Inspections 
(
Id int, 
IsRepaired Bit 
); 

InspectionIdは、多くの1つの関係にInspectionsテーブルの外部キーです。ここ

私はEventsCnfigテーブル内の任意の行が-1にカラムEventの値を更新またはEvent値と新しい行を挿入したときにトリガを作成する必要がSQL plunker

-1行Inspectionsテーブルで適切となりますIdは、列のIsRepaired値を1(真)に更新する必要があります。

希望のロジックを実装するためのトリガを作成するにはどうすればよいですか?ここで

+2

できるだけ早くトリガーを書きましょう。これまでに試したことがありますか? – nicomp

答えて

1

私はトリガを書くでしょうあなたは、単一のトリガでこれを行うにしようとすると、コードが原因のためのチェックの厄介な取得「これは、INSERTまたはUPDATE操作のですか?」など - ということをしない....

AFTER UPDATEトリガー:

CREATE TRIGGER dbo.TrgEventsConfigUpdate 
ON dbo.EventsConfig 
AFTER UPDATE 
AS 
    UPDATE insp 
    SET IsRepaired = 1 
    FROM dbo.Inspections insp 
    INNER JOIN Inserted i ON i.InspectionId = insp.Id 
    INNER JOIN Deleted d ON d.Id = i.Id 
    WHERE i.[Event] = -1 AND d.[Event] <> -1 

は、基本的には、更新後に、あなたが更新された行が含まれているInsertedDeleted擬似テーブルを見てする必要があります - もし>その列Eventに-1を更新されているとにおけるのでIsRepaired - (更新前)古い行はなかったが(更新後)新しい行は、-1の値を持ちますテーブルInspectionsが必要です1(true)に設定します。

AFTER INSERTトリガー:

CREATE TRIGGER dbo.TrgEventsConfigInsert 
ON dbo.EventsConfig 
AFTER INSERT 
AS 
    UPDATE insp 
    SET IsRepaired = 1 
    FROM dbo.Inspections insp 
    INNER JOIN Inserted i ON i.InspectionId = insp.Id 
    WHERE i.[Event] = -1 

同じ考え方 - 少しだけ単純に比較することがない「古い」行をありませんので、:挿入された行のリストの列の値が-1であれば、その後、それらのInspectionId値のInspectionsテーブルを1に更新します。

+0

マーク、答えに感謝します。挿入と更新のトリガーを作成しようとすると、SQLフィドルでエラーが発生します。キーワード 'TRIGGER'の近くに構文が正しくありません。 私はtryしましたEND;しかし、私はまだエラーが発生します。どのようなアイデアをどのようにSQLのフィドルで複数のトリガを作成できますか? – Michael

+0

@Michael:2人の間に「GO」が必要な場合があります –

0

、あなたはすべてのトリガーについて読むことができます。

How to use update trigger to update another table?

https://msdn.microsoft.com/en-us/library/ms189799.aspx

http://www.sqlteam.com/article/an-introduction-to-triggers-part-i

自分でトリガを構築するために十分な情報よりもあるはずです。 あなたが望むように機能しない「仕上げ」トリガーがある場合は、ここに投稿してコミュニティがあなたを助けます。 INSERTためUPDATEに1つ、別の - -

関連する問題