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