トリガーが初めてで、列の更新でトリガーを作成し、その値で別のテーブルを更新したい。
年列を含むtable1があり、アプリケーションがその年列を更新する場合、同じ年の年を使用して表2を更新する必要があります。
ALTER TRIGGER [dbo].[trig_UpdateAnnualYear]
ON [dbo].[table1]
AFTER UPDATE
AS
if (UPDATE (intAnnualYear))
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
Update table2 set AnnualYear = intAnnualYear where table2.ID = table1.ID
END
参照しないtable1
トリガー内。 inserted
擬似テーブルを使用して、「後」の値を取得します。また、更新は複数の行に影響する可能性があることを忘れないでください。
したがって、現在のupdate
ステートメントを
UPDATE table2
SET table2.annualyear = inserted.intannualyear
FROM table2
JOIN inserted
ON table2.id = inserted.id
列intannualyearが関係する場合にのみ、table2のレコードを更新する必要があります。また、これは、Martinが示した2つのテーブルにわたる代替UPDATE構文です。
IF UPDATE(intannualyear)
UPDATE table2
SET annualyear = inserted.intannualyear
FROM inserted
WHERE table2.id = inserted.id
この質問 によれば、「ダウンストリーム」テーブルが1つしかない場合、適切に定義された外部キー関係を持つ別のオプションはカスケード更新になります。
上記の答えを補足するために、複数の列をチェックする必要がある場合は、挿入と削除の間にINNER JOINを使用するか、いくつかのUPDATE()呼び出しを使用できます。
IF ( UPDATE(Col1) OR UPDATE(Col2) ) BEGIN ...