2016-08-13 5 views
2

에 새 레코드가 삽입되거나 BOM.Site 열이 업데이트되면 dbo.SiteMap 값을 조회하고 SiteMap.SiteName 값을 입력하고 BOM.SiteMap 열에 삽입하십시오. 그래서 나는 방아쇠가 갈 방법이 될 것이라고 생각했지만 작동하지 않습니다. (방아쇠가 이것에 최고 apporach가 아닌 경우에 저에게하십시오!) 어떤 제안? 미리 감사드립니다.삽입 또는 업데이트시 다른 테이블의 값을 가진 동일한 행에 값을 삽입하는 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

'PlantCode' 열을하여 제공하는 테이블 구조에. 오타 또는 무엇입니까? 그렇다면'SiteMap' 테이블에서'Sitecode' 컬럼이 있어야합니다. BTW에서는이 요구 사항에 대한 방아쇠를 만들 필요가 없습니다. 저장 프로 시저 (app에있는 경우)에서이를 수행 할 수 있습니다. 한가지 더 질문 - 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