2011-12-21 35 views
2

我创建了一个表的触发器,我有如下语句:SQL触发器和组合键

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

问题是,有没有“ID”的ConsignmentTripBreakdown领域 - 而不是有一个复合在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 2011-12-21 11:19:09

+0

@Dems:你确定吗? – 2011-12-21 11:20:14

+0

我相信它会*可能*存在于两个表中,是的;)但是,由于OP显示'x.id IN(inserted.id)',这似乎更可能不是我,因为我会另有预料一个或其他字段名称为'something_id'。不是保证,不,但足够我想要安全。 – MatBailie 2011-12-21 11:23:07