2012-03-22 12 views
1

これは私が持っているものです。それはMSの例adnのように私はそれが実行されていない理由を把握することはできません。更新トリガーで私に手を差し伸べることはできますか?それはうまくいくように見える

WHERE gm.PlanId = i.[PlandID]

は私が計画表と同じフィールドが含まれますINSERTED印象の下にあった:私は、この行の「PLANID」エラーInvaild列名を取得します。たぶん私は道を離れている - これは私の最初のトリガーです!

PlanIDはPlanテーブルの主キーで、Measuresの外部キーです。私は基本的に、PlanのStatusフィールドの行が更新されたことを確認し、MeasuresのStatusフィールドを更新することを検討しています。

CREATE TRIGGER utr_Plan_Cascade_Status 
    ON [dbo].[Plan] 
    for UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF(UPDATE([Status])) 
    BEGIN 
     UPDATE dbo.Measures 
      SET [Status]= i.[Status] 
     FROM dbo.Measures m, INSERTED i, DELETED d 
      WHERE m.PlanId = i.[PlandID] 

    END 

END 

助けてください。

+0

を持っていた - しかし、唯一** 1 **は'間の結合条件mと 'i' - 基本的に' d'の各行と 'm' /' i'の各行にマッチするデカルト積を作成しているので、行数が多すぎます... SQLMenaceの答えを見てください - * ANSI **結合条件を正しく指定するように強制する 'INNER JOIN'構文の構文を結合します –

答えて

3

なぜあなたは古いスタイルjoinsを使用していますか?

また、削除されたテーブルはまったく必要ありません。

これはあなた

UPDATE m 
      SET m.[Status]= i.[Status] 
     FROM dbo.Measures m 
     JOIN INSERTED i ON m.PlanId = i.[PlandID] 

ちょうどあなたが次

Update Table set Status = Status 

は、おそらくあなたはWHERE句

where m.Status <> i.Statusを追加したいならばFYI .. IF(UPDATE([Status]))が発火するなどのために働く必要があります

また、その列がNULL値である場合は、このwhere節でその列を考慮する必要があることに注意してください。

+0

古いスタイルとあなたが書いたものと読みやすさとの間にはパフォーマンスの違いはありますか? – Yatrix

+1

パフォーマンスの違いはありませんが、間違って古いスタイルの構文で 'cartesian product'を作成するのは非常に簡単です – SQLMenace

+0

新しい構文はansi標準です。私はあなた自身のパフォーマンスをテストします。クエリオプティマイザが、すべてのクエリに対して同じプランを生成するかどうか(依存すると思いますが)は、実行計画を自分自身で確認するかどうかによって異なります。 –

1

PlanIDの綴りが間違っています。

+0

Dammit。恥ずかしいです。 =) – Yatrix

1

まず、あなたは正しいJOIN構文を使用する必要があり、あなたの `FROM`句にコンマで区切られた3つのテーブルを指定することでスペルミス

CREATE TRIGGER utr_Plan_Cascade_Status 
    ON [dbo].[Plan] 
    for UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF(UPDATE([Status])) 
    BEGIN 
     UPDATE m 
      SET m.[Status]= i.[Status] 
     FROM dbo.Measures m 
     INNER JOIN INSERTED i 
      WHERE m.PlanId = i.[PlanID] 

    END 

END 
関連する問題