2011-12-21 3 views
2

나는 테이블에 대한 트리거를 만드는거야, 나는 다음과 같은 문이 :SQL 트리거 및 복합 키

UPDATE [dbo].ConsignmentTripBreakdown SET VehicleTypeID = CONVERT(bigint,LTRIM(RTRIM(VehicleType))) 
WHERE [dbo].ConsignmentTripBreakdown.ID IN (SELECT ID FROM Inserted) 

문제는 ConsignmentTripBreakdown에는 'ID'필드가없는입니다 - 대신 복합있다 3 개의 필드에 키를 입력하십시오. 이것을 위해 where 절을 어떻게 재 작성해야합니까?

답변

3
UPDATE 
    [dbo].ConsignmentTripBreakdown 
SET 
    VehicleTypeID = CONVERT(bigint,LTRIM(RTRIM(inserted.VehicleType))) 
FROM 
    [dbo].ConsignmentTripBreakdown 
INNER JOIN 
    inserted 
    ON inserted.pk_part1 = ConsignmentTripBreakdown.pk_part1 
    AND inserted.pk_part2 = ConsignmentTripBreakdown.pk_part2 
    AND inserted.pk_part3 = ConsignmentTripBreakdown.pk_part3 
1

복합 키의 모든 구성 요소 열에서 inserted 테이블에 대한 조인을 사용합니다. 예를 들어 :

UPDATE ctb 
SET ctb.VehicleTypeID = CONVERT(bigint,LTRIM(RTRIM(VehicleType))) 
FROM [dbo].ConsignmentTripBreakdown ctb 
INNER JOIN Inserted i ON i.k1 = ctb.k1 and i.k2 = ctb.k2 and i.k3 = ctb.k3 
+0

VehicleType은 잠재적으로 두 테이블에 존재합니다. 더 구체적이어야합니다. – MatBailie

+0

@Dems : 확실합니까? –

+0

그렇습니다. * 잠재적으로 * 두 테이블에 모두 존재할 것으로 확신합니다.) 그러나 OP에 'x.id IN (inserted.id)'가 표시되어 있으므로 다른 방식으로는 예상하지 못한 것처럼 내게 모자가 아닌 것처럼 보입니다. 하나 또는 다른 필드 이름을'something_id '로 지정하십시오. 보증은 아니지만, 안전하다고 생각하기에 충분할만큼 충분합니다. – MatBailie