La base de datos es SQL Server 2008. Tengo una consulta que extrae filas de una o más tablas y luego intenta insertarlas en una variable de tabla.Prevención de insertos de tabla duplicados
me gustaría una manera eficiente para prevenir inserciones duplicados, así que lo que ocurrió fue:
INSERT INTO @MyTableVariable
SELECT SomeID
FROM SomeTable st
INNER JOIN SomeOtherTable sot ON sot.SomeID = st.SomeID
LEFT JOIN @MyTableVariable t ON t.SomeID = sot.SomeID
WHERE t.SomeID IS NULL
Esto, sin embargo, no parece prevenir inserciones duplicadas en ciertos escenarios.
Parece como si (y esto tiene sentido si lo piensa y mira el plan de consulta) que solo se utiliza el "estado" inicial de @MyTableVariable en la operación de unión izquierda. En otras palabras, esto evitaría duplicados si @MyTableVariable ya tenía SomeID allí antes de ejecutar esta instrucción, pero no evitaría duplicados si FROM/INNER JOIN en SomeTable/SomeOtherTalbe generaba SomeID duplicados.
Además de simplemente presionar un DISTINCT en la instrucción SELECT, ¿hay alguna otra manera más eficiente de manejar esto?
Si no desea hacer un 'DISTINCT' o un' GROUP BY', entonces podría crear un índice único en su columna e ignorar las claves duplicadas. – Lamak
¿Cómo hace para ignorar los errores clave duplicados? ¿Y esto es realmente más rápido que realizar lo distinto? – RMD