Я использую SQL Management Studio 2012. Я хотел бы обновить поле из таблицы, которая не входит в отношение «Цель / Источник» в процедуре хранения, используя TRIGGER для обновления записей из представления ([dbo] .ActivityView tv).) в редактируемую таблицу ([dbo] .ActivityTracker t).Записи попадают и выходят из просмотра на основе поля даты [ЗАВЕРШЕНИЕ].Если значение даты [ЗАВЕРШЕНИЕ] находится за концом квартала, оно выпадает из представления, но вызывает «Не будет завершено» в столбце цели [ЗАВЕРШЕНИЕ].Однако, когда это происходит, я не вижу, когда произошла эта отметка времени обновления для поля [ЗАВЕРШЕНИЕ], поскольку она больше не находится в представлении.Значение существует в «THISOTHERTABLE», основанном на представлении.Поэтому я хотел бы обновить поле в Target из «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» имеет несколько записей для поля идентификатора, поэтому мне пришлось бы выбрать отдельный TIMESTAMP, чтобы получить только одно значение для уникального идентификатора в таблице TARGET.Тем не менее, THISOTHERTABLE уже имеет только MAX (TIMESTAMP) для TIMESTAMP, поэтому нет необходимости делать MAX.Таблица TARGET имеет только одну уникальную запись для каждого идентификатора.Можно ли написать подзапрос UPDATE, как я показал в последней строке примера кода?