我要求根据价值修改/插入产品中的新数据
目前我正在使用SSIS将数据插入堆表,然后我需要根据Status将记录移动到表中
我有3个状态添加,更新,删除。
如何根据下面提到的状态编写插入/更新查询?
这是逻辑:
答案 0 :(得分:1)
两种选择:
在存储过程中包装1或2,然后只需从SSIS调用该过程。就个人而言,我使用的是示例1的版本,其中插入/更新代码是单独包装的过程,upsert过程只是按正确的顺序调用。这比示例2效率略低,但我发现它是一种更灵活和可维护的模式(特别是与table-valued parameters配对时)。
示例1:
create procedure dbo.usp_MyTable_Upsert
as
begin;
update <Target>
set ...
from <Source>
join <Target>
on ...;
insert into <Target>(...)
select ...
from <Source>
where not exists (
select 1
from <Target>
where ...
);
end;
示例2:
create procedure dbo.usp_MyTable_Upsert
as
begin;
merge <Target>
using <Source>
on ...
when matched then
update
set ...
when not matched by target then
insert ...
when not matched by source then
delete;
end;