2012-05-21 3 views
1

following problem을 처리하는 트리거를 작성하려고합니다. 나는 삽입 된 테이블에서 필요한 변수를 꺼내려고 노력 중이다. 다른 테이블의 데이터와 결합하여 필요한 테이블에 삽입한다. (나는 이것이 모호하고 혼란 스럽다는 것을 안다.Insert 문 + 트리거에서 테이블 데이터와 변수 결합

세 개의 테이블을 데이터베이스에 :

  1. 표 사용자 :
    사용자 정보의 테이블, 식별 번호를 포함
  2. 표 PlaneGPSCoordinates

    내가 데이터베이스가 작동하는 방법이다 :
    라이브 GPS 좌표 테이블입니다. 이 테이블은 크기가 변하지 않으며, 값은 방금 업데이트됩니다.
  3. 표 MatchingInformation :
    두 개의 열, 사용자 ID 번호 및 평면 좌표가있는 표.

트리거는 다음을 수행해야합니다 : 표 "사용자"에 삽입

  1. 새 행을 (즉, 사용자가 로그인까지)
  2. 트리거 자동으로 복사 키 열을 제외한 PlaneGPSCoordinates의 데이터 () 및 새 사용자의 ID 번호를 가져 와서 두 항목을 표 MatchingInformation에 삽입합니다. 좌표의 5 행마다 1 개의 사용자 ID 번호가 생깁니다. 즉, 트리거는 5 개의 행을 MatchingInformation에 추가합니다. 여기서 userID = 새 사용자의 ID이며 좌표는 모두 PlaneGPSCoordinates 테이블에서 복사됩니다. 내가 SQL에 아주 새로운, 그래서 최악을 가정

    CREATE TRIGGER dbo.Matching 
    ON dbo.UserInfo 
    FOR INSERT 
    AS 
    
    DECLARE @userID as INT 
    
    BEGIN 
    SET NOCOUNT ON; 
    
    SELECT @userID = inserted.ID FROM inserted 
    
    INSERT.... 
    
    END 
    GO 
    

    : 같은

현재, 내 불완전 코드 보인다. GPS 좌표를 가져 와서 INSERT 문을 작성하고 사용자 ID와 결합하여 일치하는 테이블로 밀어 넣는 방법을 모르겠습니다 ...

어떤 도움을 많이 받으실 수 있습니다!

+1

트리거는 행 집합에 대해 작동합니다. 당신의 코드는'SELECT @userID = inserted.IF FROM inserted' 한 번에 하나의 행만 삽입 할 것으로 기대합니다. – HABO

답변

1

트리거는 한 번에 한 행을 처리하는 것처럼 처리 할 수 ​​없습니다. 다중 값 절 또는 중첩 된 선택을 사용하여 삽입이 발생하면 트리거는 전체 작업에 대해 한 번 실행됩니다. 즉 임의의 @UserID 하나만 처리합니다.

여기 PlaneGPSCoordinates 테이블에 정확히 5 개의 행이 있다고 가정하고 모든 새 사용자가 얻는 좌표라고 가정합니다.

CREATE TRIGGER dbo.Matching 
ON dbo.UserInfo 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT dbo.MatchingInformation(GPS1, GPS2, UserID) 
    SELECT p.GPS1, p.GPS2, i.UserID 
     FROM dbo.PlaneGPSCoordinates AS p 
     CROSS JOIN inserted AS i; 
END 
GO 

그러나 이것은 왜 모든 사용자에 대해 동일한 좌표를 복사합니까? 이것이 자주 업데이트 될 것인가? 시작하기 위해 몇 가지 기본값을 넣고 싶습니까?

+0

굉장해, 너는 전설이야. 지금 이걸 넣고, 다시 감사합니다 – keynesiancross

+0

그리고 나는 그것이 작동 확인, 다시 한 번 감사드립니다 – keynesiancross