Если я вас правильно понимаю, вставьте строки из @T2
, которых еще нет в @T1
, где Active = 'y'
.
declare @T1 table
(
Code char(2),
Descr varchar(10),
Active char(1)
)
declare @T2 table
(
Code char(2),
Descr varchar(10)
)
insert into @T1 values
('1', 'Desc 1', 'y'),
('2', 'Desc 2', 'n')
insert into @T2 values
('1', 'Desc 1'),
('2', 'Desc 2'),
('3', 'Desc 3')
merge @T1 as D
using @T2 as S
on D.Code = S.Code and
D.Active = 'y'
when not matched then
insert (Code, Descr, Active)
values (Code, Descr, 'y');
select *
from @T1
Результат:
Code Descr Active
---- ---------- ------
1 Desc 1 y
2 Desc 2 n
2 Desc 2 y
3 Desc 3 y
Строка сКод 3 также будет вставлен.Если вы этого не хотите, это означает, что вы хотите вставить строку в @T1
, только если в @T2
уже есть строка с кодом в коде, но Active = 'n'
, вы можете использовать ее вместо этого.
merge @T1 as D
using (select Code,
Descr
from @T2
where Code in (select Code
from @T1
where Active = 'n')) as S
on D.Code = S.Code and
D.Active = 'y'
when not matched then
insert (Code, Descr, Active)
values (Code, Descr, 'y');
Результат:
Code Descr Active
---- ---------- ------
1 Desc 1 y
2 Desc 2 n
2 Desc 2 y