SI PAS EXISTE dans l'instruction Merge?

Je veux faire ce qui suit, lorsque les keys primaires correspondent et s'il n'y a pas de lignes avec des loggings d'insertion 'Y' actifs. Est-ce possible?

J'ai essayé ceci:

-- Merge statement MERGE INTO table1 AS DST USING table2 AS SRC ON (SRC.Code = DST.Code) --Existing records updated if data changes WHEN MATCHED AND IF NOT EXISTS (WHERE active='Y' FROM table1 ) THEN INSERT INTO table1 (colum) SELECT value +-------+-------------+--------+ | Code | description | Active | +-------+-------------+--------+ | AB | just | | | | something | No | +-------+-------------+--------+ 

seulement quand il n'y a pas d'logging actif avec le même code, je veux insert un logging. Le nouvel logging ressemblerait à ceci

 +-------+-------------+--------+ | Code | description | Active | +-------+-------------+--------+ | AB | something | | | | else | YES | +-------+-------------+--------+ 

J'espère que cela le rendra plus clair

edit: Tant pis si c'est impossible, j'ai juste ce message d'erreur: Une action de type 'INSERT' n'est pas permise dans la clause 'WHEN MATCHED' d'une instruction MERGE.

Si je vous comprends bien, insérez des lignes de @T2 qui ne sont pas déjà dans @T1Active = '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 

Résultat:

 Code Descr Active ---- ---------- ------ 1 Desc 1 y 2 Desc 2 n 2 Desc 2 y 3 Desc 3 y 

Une ligne avec le code 3 sera également insérée. Si vous ne le vouliez pas, c'est-à-dire que vous voulez seulement insert une ligne à @T1 s'il existe déjà une ligne @T2 avec une correspondance sur le code mais Active = 'n' vous pouvez l'utiliser à la place.

 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'); 

Résultat:

 Code Descr Active ---- ---------- ------ 1 Desc 1 y 2 Desc 2 n 2 Desc 2 y