2016-08-13 8 views
2

に新しいレコードが挿入されたとき、またはBOM.Siteの値を参照してdbo.SiteMapの値を参照して戻したいSiteMap.SiteNameの値を入力してBOM.SiteMap列に挿入します。だから私は引き金が行く方法だと思ったが、それは動作しません。 (トリガーがこれに最も適していない場合は、私に知らせてください!)何か提案がありますか?前もって感謝します。挿入または更新時に別のテーブルの値を持つ同じ行に値を挿入するSQLトリガー

テーブル:

=BOM= 
id | Site | SiteMap 
---+----------+------ 
1 | Mex | 
2 | MXN | 
3 | USA | 
4 | Mex | 


=SiteMap= 
id | SiteName | Sitecode 
---+----------+------ 
1 | Mexico | Mex 
2 | Mexico | MXN 
3 | USA  | USA 
4 | USA  | United States of America 

所望の出力:

=BOM= 
id | Site | SiteMap 
---+----------+------ 
1 | Mex | Mexico 
2 | MXN | Mexico 
3 | USA | United States of America 
4 | Mex | Mexico 

私は..

CREATE TRIGGER dbo.trMapBom on dbo.BOM 
    AFTER INSERT,UPDATE 
AS 
BEGIN 

    SET NOCOUNT ON; 

    IF UPDATE([Site ]) 
    BEGIN 
     UPDATE dbo.BOM 
     SET BOM.[Site Map] = 
     (
      SELECT [SiteName] 
      from dbo.SiteMap 
      where [PlantCode] = [Site ] 
     ) 
    END 
END 
GO 

もう..

CREATE TRIGGER dbo.trMapBom on dbo.BOM 
    AFTER INSERT,UPDATE 
AS 
BEGIN 

    SET NOCOUNT ON; 

    UPDATE dbo.BOM set [Site ] = SiteMap.SiteName 
    from dbo.BOM 
    inner join dbo.SiteMap 
    on BOM.[Site ] = SiteMap.PlantCode 

END 
GO 
を試し異なる物事のカップルを試してみました
+1

私はあなたの提供テーブル構造で 'P​​lantCode'列を見ていません。それはタイプミスか何ですか?もしそうなら、 'SiteMap'テーブルから' Sitecode'カラムがあるはずです。この要件のためにトリガを行う必要はありません。あなたのストアドプロシージャ(あなたのアプリ内にある場合)でそれを達成することができます。もう1つの質問 - 新しいレコードを 'BOM'テーブルに挿入すると、関連する' SiteCode'は常に 'SiteMap'テーブルにあります。最初に確認してください。関連レコードが 'SiteMap'テーブルに存在しない場合はどうなりますか? –

答えて

0

あなたは、トリガーに挿入された行を使用する必要があります。

CREATE TRIGGER dbo.trMapBom on dbo.BOM 
    AFTER INSERT,UPDATE 
AS 
BEGIN 

    SET NOCOUNT ON; 

    UPDATE b 
    set [SiteMap] = sm.SiteName 
    from dbo.BOM b 
    inner join dbo.SiteMap sm 
    on b.[Site] = sm.SiteCode 
    inner join inserted i 
    on i.id = b.id 

END 
GO 
関連する問題