В настоящее время я использую задание агента SQL Server для создания таблицы основных пользователей для своих внутренних веб-приложений, потянув данные из 3 других баз данных; Sharepoint, система управления практикой и наша база данных о персонале.Обновление таблицы SQL со значениями из другого вложенного запроса
В настоящее время идет ...
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 как неактивный (используя столбец активной и установить его на ложь) 2) Выполнить запрос на три присоединились таблицы и обновлять каждый найденные записи, также отмечая их как активные.
Я не вижу, как я могу вложить оператор select в оператор обновления, как это имеет место здесь с инструкцией Insert.
Как я могу достичь этого, пожалуйста?
* обратите внимание, что я отредактировал свой SQL до 4 столбцов и упростил его, поэтому небольшие ошибки, вероятно, связаны с поспешным редактированием. Реальный запрос намного больше.
Также как и обновление флага, вы также хотите вставить новых пользователей? Если да, то в какой версии SQL Server вы работаете? Надеюсь, 2008 год, поэтому вы можете использовать 'merge'! –
Да, я хочу обновить существующие записи и добавить новые. Я использую SQL Server 2008. – Yeodave
Прежде чем вы обрезаете таблицу, вы можете поместить данные во временную таблицу, чтобы вы могли разрешить различия после завершения процесса? – Suirtimed