如果不按源进行匹配,则来自单独表的更新列

时间:2018-10-04 15:16:19

标签: sql-server merge triggers

我正在使用SQL Management Studio 2012。 我想使用触发将记录中的记录从视图([dbo] .ActivityView tv)更新到可编辑表([dbo] .ActivityTracker),以更新存储过程中目标/源关系之外的表中的字段t)。记录基于[COMPLETION]日期字段落入和落入视图。如果[COMPLETION]日期值超过季度末,它将退出视图,但会在目标的[COMPLETION]列中触发“将不完整”。但是,发生这种情况时,我看不到[COMPLETION]字段的更新时间戳记何时发生,因为它不再位于View中。该值位于视图基于的“ THISOTHERTABLE”中。 因此,如果可能的话,我想从“ THISOTHERTABLE”更新目标中的字段。

MERGE [dbo].[ActivityTracker] t --TARGET
USING  [dbo].[ActivityView] tv  --SOURCE
on tv.ID = t.ID 
WHEN MATCHED THEN
UPDATE
SET t.ID = tv.ID,
Do Stuff...
WHEN NOT MATCHED BY TARGET THEN 
Do Stuff...
WHEN NOT MATCHED BY SOURCE THEN
Set t.TIMESTAMP = (select distinct o.TIMESTAMP from [dbp].THISOTHERTABLE o where t.ID = o.ID) END

“ THISOTHERTABLE”具有ID字段的多个记录,因此我将不得不选择不同的TIMESTAMP来仅获得TARGET表中唯一ID的单个值。但是,THISOTHERTABLE已经只有TIMESTAMP的MAX(TIMESTAMP),因此不需要做MAX。 TARGET表的每个ID只有一个唯一记录。像我在示例代码的最后一行中显示的那样,是否可以编写一个UPDATE子查询?

0 个答案:

没有答案