2017-11-13 13 views
0

トリガには、実際に変数としてリストする必要がある値をハードコードするときに作成されたものが作成されました。コードのように、テーブルtbl_measure_statsにはStatsTriggerがトリガされます。 tbl_measure_statsが変更されると、tbl_activity.override = 0と設定されます.tbl_activity.activityidはtbl_measure_status.actidに等しくなるはずです。トリガーテーブルの値はtbl_activity.activityidのidと等しいtbl_measures_stats.actidです。その値は0に設定する必要があります。54321に関連する変数をどのように記述すればよいですか?コードは、私の説明よりも、実際に簡単です:これはまっすぐ進むソリューションでなければなりませんが、私はすべての私の検索で実用的なものを見つけていないのですようMSSQL 2008トリガ - 変数= 2つのテーブル間の共通の値

USE [TestDB] 
GO 
/****** OBJECT: Trigger [dbo].[StatsTrigger] ******/ 
/****** PURPOSE: detect any field changes in tbl_measure_stats ******/ 
/****** ... then set tbl_activity.override = 0 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
ALTER TRIGGER [dbo].[StatsTrigger] --resides in tbl_measure_stats>Triggers 
ON tbl_measure_stats --table which has the trigger 
AFTER INSERT,DELETE,UPDATE --when something changes... 
AS UPDATE tbl_activity set override = 0 where tbl_activity.activityid = 54321 

らしいです。古い、新しい、例えば挿入された...私はそれらを働かせていません。例 "挿入" をしようとしたとき:

AS UPDATE cpy_activity set porc = 0 where cpy_activity.activityid = inserted.actid 

はエラーを返します:

The multi-part identifier "inserted.actid" could not be bound. 

アイデアを?

答えて

1

おそらくINSERTEDをクエリのFROM句に含める必要があります。

ALTER TRIGGER [dbo].[StatsTrigger] --resides in tbl_measure_stats>Triggers 
ON tbl_measure_stats --table which has the trigger 
AFTER INSERT,DELETE,UPDATE --when something changes... 
AS 
    UPDATE A SET override = 0 
    FROM tbl_Activity A JOIN INSERTED I ON A.activityID = I.actid 

注しかしINSERTEDが原因DELETEアクションのいずれかの行トリガーの起動を持っていないということ。 INSERTEDまたはDELETEDに行があるかどうかをチェックし、それに応じて適切なことを行う必要があります。

+0

私はstackoverflowに依存して謙虚になりました。 cf_enあなたは頭の中でまっすぐに爪を打つ。今、私は統計ページでメジャー値を変更し、トリガーはmssqlで実行され、メジャー値が変更されるたびにオーバーライド値が0に変更されます。私はこれを支払うことができます期待しながら、多くのおかげで! – dcparham

関連する問題