Tengo una tabla que se ve algo como:de consulta MERGE y eliminar registros
AccountID, ItemID
1, 100
1, 200
2, 300
Tengo un proc que acepta un parámetro de valor de la tabla que actualiza los artículos asociados a una cuenta. Vamos a pasar algo como lo siguiente:
AccountID, ItemID
3, 100
3, 200
El proc se ve algo como:
procedure dbo.MyProc(@Items as dbo.ItemListTVP READONLY)
AS
BEGIN
MERGE INTO myTable as target
USING @Items
on (Items.AccountId = target.AccountId)
AND (Items.ItemId = target.ItemId)
WHEN NOT MATCHED BY TARGET THEN
INSERT (AccountId, ItemId)
VALUES (Items.AccountId, Items.ItemId)
;
END
Sobre la base de la aprobada en los datos que espero que añadir 2 nuevos registros a la tabla, lo que lo hace .
Lo que quiero es tener una cláusula WHEN NOT MATCHED BY SOURCE que elimine los elementos para la cuenta especificada que no coincidan.
Por ejemplo, si paso
AccountID, ItemID
1, 100
1, 400
Entonces lo quiero para borrar el registro que tiene 1, 200; pero dejen TODOS los otros.
Si acabo de hacer:
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
entonces se eliminará todos los registros de cuentas no se hace referencia (es decir: los identificadores de la cuenta 2 y 3).
¿Cómo puedo hacer esto?
Gracias,
El primero parece prometedor. Lo probaré y le haré saber. Por el momento, creo que preferiría tener una ejecución de consulta DELETE por separado en lugar de hacer un CTE. La consulta original es un poco más complicada que la muestra anterior. – NotMe
tomó un tiempo para volver a esto. La primera opción en la condición DELETE funcionó perfectamente. Gracias, – NotMe
First One funcionó para mí. +1. –