CREATE TRIGGER dbo.Activities_Update
ON dbo.Activities
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE a
SET EstimatedDate = i.EstimatedDate
FROM dbo.Activities AS a
INNER JOIN inserted AS i
ON a.ProjectId = i.ProjectId
WHERE a.EstimatedDate <> i.EstimatedDate;
END
GO
それはあなたのUPDATE
文は次のようになりますとは考えにくいですが:
UPDATE Activities SET EstimatedDate = CASE
WHEN ActivityID = 1 THEN GETDATE()
WHEN ActivityID = 2 THEN DATEADD(DAY, 1, GETDATE()) END
WHERE ProjectID = 1;
あなたはinserted
からMAX
日付を使用する場合は、あなたが言うことができる:
CREATE TRIGGER dbo.Activities_Update
ON dbo.Activities
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
;WITH i AS (SELECT ProjectId, d = MAX(EstimatedDate)
FROM inserted GROUP BY ProjectId)
UPDATE a
SET EstimatedDate = i.d
FROM dbo.Activities AS a
INNER JOIN i
ON a.ProjectId = i.ProjectId
WHERE a.EstimatedDate <> i.d;
END
GO
後者がテストされていません。
同じProjectIDの複数のレコードが異なる新しいEstimatedDateに更新されると、どのような動作になりますか?それは価値がある*(私はこれはOPへの質問であると思います)*行動を指定するか? *(新しいEstimatedDate値のMAX()の選択など)* – MatBailie
@Demsは良い点です。トリガは複数の行を処理しますが、影響を受ける単一行の実際の実装のみを考慮しました。更新しました。 –