Tengo una clave principal de dos columnas en una tabla. He intentado cambiar a establecer el ignore_dup_key
a continuar con este comando:¿Puedo establecer ignore_dup_key para una clave principal?
ALTER INDEX PK_mypk on MyTable
SET (IGNORE_DUP_KEY = ON);
pero me sale este error:
Cannot use index option ignore_dup_key to alter index 'PK_mypk' as it enforces a primary or unique constraint.
¿Cómo, si he de poner a IGNORE_DUP_KEY
en?
Mi problema es este: Tengo que insertar una gran cantidad de registros diariamente y actualmente estoy haciendo un comando de inserción para cada registro. Si el registro ya existe, se ignorará (lanzando un error de clave duplicado). Desde un POV de rendimiento, es mejor intentar una inserción y permitir que algunos fallen, de lo que es verificar si el registro existe antes de insertar. El siguiente paso para mejorar el rendimiento es usar SqlBulkCopy para hacer las inserciones en lugar de un único comando para cada registro. Pero esto no es posible si existe algún registro, ya que todo el lote falla si ignore_dup_key está desactivado. –
¿Qué ocurre si una de las columnas de mi clave principal está definida por el usuario? ¿Y qué sucede si necesito admitir inserciones de varias entidades al mismo tiempo, digamos 1000? ¿Cómo puedo validar que todas las entradas son únicas antes de la inserción sin un fuerte golpe para el servidor?Creo que la opción de ignorar duplicados es bastante apropiada en esa situación. ¿Estás en desacuerdo? – julealgon
Sí, no tiene la clave principal si ignora los duplicados y, si lo hace, si tiene una clave principal, tendrá un mundo lastimado con datos erróneos. Es una mejor práctica colocar los datos en una tabla de etapas y luego usar una instrucción de selección para insertar solo los nuevos registros. Insertamos millones de registros de esta manera. – HLGEM