2
讓我解釋一下我的場景。 假設我在「Activities」表中有10條記錄,並帶有「EstimatedDate」列。每個記錄都是唯一的,並具有不同的「EstimatedDate」。這10條記錄都屬於同一個項目,具有相同的「ProjectId」。 如果我更改一行的「EstimatedDate」,它應該自動更改具有相同「ProjectId」的表中的以下行。想用更新觸發器更新多條記錄
讓我解釋一下我的場景。 假設我在「Activities」表中有10條記錄,並帶有「EstimatedDate」列。每個記錄都是唯一的,並具有不同的「EstimatedDate」。這10條記錄都屬於同一個項目,具有相同的「ProjectId」。 如果我更改一行的「EstimatedDate」,它應該自動更改具有相同「ProjectId」的表中的以下行。想用更新觸發器更新多條記錄
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的多個記錄更新到不同的新EstimatedDates,那麼行爲會是什麼?它會值得嗎?(我想這是對OP的一個問題)*指定一個行爲? *(如選擇新的EstimatedDate值的MAX()?)* – MatBailie 2012-04-23 18:28:57
@Dems這是一個很好的觀點。雖然觸發器處理多行,但我只考慮了影響單行的實際實現。更新。 – 2012-04-23 18:35:35