2

私のシナリオを説明しましょう。「アクティビティ」テーブルに「EstimatedDate」列を持つ 10 個のレコードがあるとします。各レコードは一意であり、異なる「EstimatedDate」を持っています。これらの 10 件のレコードはすべて、同じ "ProjectId" を持つ 1 つのプロジェクトに属しています。1 つの行の「EstimatedDate」を変更すると、同じ「ProjectId」を持つテーブルの下の行が自動的に変更されます。

4

1 に答える 1

2
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;

MAXからの日付を使用したい場合は、次のinsertedように言えます。

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

後者はテストされていません。

于 2012-04-23T18:24:03.757 に答える