В настоящее время я использую задание агента SQL Server для создания основной пользовательской таблицы для своих собственных веб-приложений, извлекая данные из 3 других баз данных; Sharepoint, система управления практикой и наша база данных персонала.
В настоящее время идет ...
truncate table my_tools.dbo.tb_staff
go
insert into my_tools.dbo.tb_staff
(username
,firstname
,surname
,chargeoutrate)
select right(wss.nt_user_name,
,hr.firstname
,hr.surname
,pms.chargeoutrate
from sqlserver.pms.dbo.staff as pms
inner join sqlserver.wss_content.dbo.vw_staffwss as wss
on pms.nt_user_name = wss.nt_user_name
inner join sqlserver.hrdb.dbo.vw_staffdetails as hr
on wss.fullname = hr.knownas
go
Проблема в том, что вся таблица очищается в качестве первого шага, поэтому мой первичный ключ с автоинкрементом / идентифицированный в tb_staff наверняка изменится. Также, если кто-то удален из sharepoint или PMS, он не будет воссоздан в этой таблице, что приведет к несоответствиям во всей базе данных.
Я хочу сохранить записи в этой таблице даже после их удаления из одной из других систем.
Полагаю, я хочу сделать следующее:
1) Пометить все существующие записи в tb_staff как неактивные (используя столбец с именем active и установить его в false)
2) Запустите запрос к трем объединенным таблицам и обновите каждую найденную запись, также пометив их как активные.
Я не вижу, как я могу вложить оператор select в оператор Update, как здесь с оператором Insert.
Как мне этого добиться?
* пожалуйста, обратите внимание, что я отредактировал свой SQL до 4 столбцов и упростил его, так что небольшие ошибки, вероятно, связаны с быстрым редактированием. Реальный запрос намного больше.