Я пытаюсь реализовать медленное изменение размера с 2 по T-SQL, но я не могу понять, как подать запрос на работу.SQL Server - Как использовать заявление о слиянии для медленного изменения размера с более чем двумя условиями?
Столбцы таблицы: cpf
, nome
, telefone_update
, endereco_insert
В принципе логика: если MATCH
не произойдет с помощью cpf
, то запись должна быть вставлена; если произошел MATCH
, но изменилось только поле telefone_update
, нет необходимости в другой записи, и я просто хочу ОБНОВИТЬ и переопределить значения; если произошел MATCH
, но изменилось только поле endereco_insert
. Я хочу добавить новую запись и обновить даты начала и окончания.
То, что я до сих пор:
insert into #dm_lucas_tst (
[cpf],
[nome],
[telefone_update],
[endereco_insert],
[dt_scd_start],
[dt_scd_end],
[nu_scd_version]
)
select [cpf],
[nome],
[telefone_update],
[endereco_insert],
cast(dateadd(month, datediff(month, 0, getdate()), 0) as date) as [dt_scd_start],
'2199-12-31' AS [dt_scd_end],
1 AS [nu_scd_version]
from (
merge edw.dim.dm_lucas_tst as Target
using edw.dim.stg_lucas_tst as Source
on Target.cpf = Source.cpf
when not matched by target
then
insert (
[cpf],
[nome],
[telefone_update],
[endereco_insert],
[dt_scd_start],
[dt_scd_end],
[nu_scd_version]
)
values (
Source.[cpf],
Source.[nome],
Source.[telefone_update],
Source.[endereco_insert],
cast(dateadd(month, datediff(month, 0, getdate()), 0) as date),
'2199-12-31',
1
)
when matched
and Source.telefone_update <> Target.telefone_update
and Target.dt_scd_end = '2199-12-31'
then
update set telefone_update = Source.telefone_update
output $ACTION ActionOut,
Source.[cpf],
Source.[nome],
Source.[telefone_update],
Source.[endereco_insert]
) AS MergeOut
where MergeOut.ActionOut = 'UPDATE';
Но я не думаю, что поставление другого WHEN MATCH AND ...
сделает эту работу.
Любые предложения?
Заранее благодарен!
эй @ Лукас, вы разобрались с этой проблемой? –
@KamilNowinski не очень. Я решил перейти и вставить новую строку вообще. –
привет @ Лукас, будет ли это решение, представленное ниже, помочь? –