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