Ver Mensaje Individual
  #10 (permalink)  
Antiguo 05/07/2012, 01:43
ros0809
 
Fecha de Ingreso: julio-2011
Ubicación: Palma
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Se agota el tiempo de semáforo al hacer un select

Hola iislas!!!

Los registros que tenía repetidos al ser pocos los eliminé a mano, como ya no tenía repetidos, les puse la PRIMARY KEY para éstos 3 campos que deben ser únicos.

Para poder hacer la prueba, lo que he hecho es quitarle de nuevo la primary key de forma temporal, para así poder volver a meter valores duplicados. Le he añadido un par de datos repetidos, he probado lo que me has dicho, con el TOP 10000, para poder eliminar los 10.000 primeros registros y me ha funcionado perfectamente!!!

El código que me has comentado adaptándolo a mi caso ha sido el siguiente:

Código:
WITH CTE AS
(
	SELECT TOP 10000 A_codi, TA_codi, M_codi,
	ROW_NUMBER() OVER(PARTITION BY A_codi, TA_codi, M_codi ORDER BY A_codi) AS DuplicateCount
	FROM EXCLUSION_MODALIDAD
)
DELETE
FROM CTE
WHERE DuplicateCount > 1

De ésta forma elimino los duplicados que estén en los 10.000 primeros registros, ¿cierto?
Lo que he hecho a sido lo siguiente, lanzar el código anterior y he visto que ha eliminado registros duplicados dentro de los primeros 10.000 registros. Para confirmar de que no quedan ningún repetido más, he lanzado la consulta que puse anteriormente para todos los registros con duplicados, que funciona perfectamente sin cortar la conexión y he podido comprobar que ya no quedan duplicados.

Me surge una duda, en el caso hipotético de que estuviese en la posición 12.000 por poner un ejemplo, ¿Cómo podría encontrarlo? Esto es, ¿¿cómo podría volver a mirar si hay duplicados en los siguientes 10.000 registros?? ¿Existe alguna forma que no sea tener que ir moviendo dichos registros a otra tabla temporarl para así tener siempre los top 10.000 distintos? Es sólo por curiosidad.

Ya el problema que tenía eliminar los repetidos puesto que cortaba la conexión ya esta solucionada. Muchísimas gracias por vuestra ayuda!!


Saludos!!


Cita:
Iniciado por iislas Ver Mensaje
Eliminar registros repetidos de 10,000 en 10,000, ¿Te funciona?

WITH CTE (COl1,Col2, DuplicateCount)
AS
(
SELECT TOP 10000 COl1,Col2,
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
FROM DuplicateRcordTable
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO