Quiero crear una combinación que comparar dos tablas e insertar los valores no coincidentes en otra tercera mesa o tabla de variables algo como esto:SQL fusionarse con la inserción en la otra mesa
MERGE Assets AS target
USING (@id, @name)FROM Sales AS source (id, name) ON (target.id = SOURCE.id)
WHEN MATCHED THEN
UPDATE SET target.Status = @status, target.DateModified = SYSUTCDATETIME()
WHEN NOT MATCHED THEN
INSERT INTO @tableVar (id, name, status, dateModified)
VALUES (@id, @name, @status, SYSUTCDATETIME())
le ayudaría a chicos yo para transformarlo usando algunos otros constructos.
¿Hay una alternativa al 'NO EN 'en este caso? ¿Algo como un 'JOIN' que vuelve a juntar todas las filas que no pudieron 'JOIN'? Otro entonces 'LEFT JOIN' +' IS NULL'. Además, ¿es realmente necesario el CTE? ¿No puede él 'INSERTAR EN ThirdTable FROM SELECT NonMatchedData'? – Alexandre
@PeekaySwitch: claro, pero entonces ** ESTÁS ** haciendo una 'UNIÓN EXTREMA IZQUIERDA' y comprobando que una columna del 'dbo.TargetTable' es' NULL' ... No veo qué otra opción haría estar allí, realmente ... –
¿Sabes en la parte superior de tu cabeza qué ofrece mejores prestaciones? Esperaría que el 'LEFT OUTER JOIN' fuera más efectivo, pero tal vez estén juntos, siempre traté de evitar el uso de' NOT IN' con cantidades masivas de datos en 'Where' (como IDs) – Alexandre