Sobre borrado de muuuchos registros

10/05/2006 - 16:23 por CHAR72 | Informe spam
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero la
pregunta es: como los borro? no puedo hacer delete top 1000 y borrarlos de
cada vez, tiene un campo ID pero hacer un SELECT TOP 1000 @MAX_ID=MAX(ID) y
luego un DELETE FROM ... WHERE ID<@MAX_ID eso en un recorrido de un
cursor...

Pero no hay otra forma?

Saludos

Carlos

Preguntas similare

Leer las respuestas

#1 Norman
10/05/2006 - 16:48 | Informe spam
SET ROWCOUNT 1000 -- o la cantidad de records que quieras borrar en cada
pase
delete from dbo.TuTabla
where ...

while @@rowcount > 0
delete from dbo.TuTabla
where ...

SET ROWCOUNT 0



Saludos,


Norman




"CHAR72" <char72[nos pa m]@gmail.com> wrote in message
news:
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero
la pregunta es: como los borro? no puedo hacer delete top 1000 y borrarlos
de cada vez, tiene un campo ID pero hacer un SELECT TOP 1000
@MAX_ID=MAX(ID) y luego un DELETE FROM ... WHERE ID<@MAX_ID eso en un
recorrido de un cursor...

Pero no hay otra forma?

Saludos

Carlos


Respuesta Responder a este mensaje
#2 Maxi
10/05/2006 - 17:10 | Informe spam
Hola, te paso un ejemplo de como borrar registros en sql2005 de a partes

CREATE TABLE ##PEDIDOS (ID INT IDENTITY, VALOR INT)
GO


DECLARE @N INT
SET @N = 1
WHILE @N <= 500
BEGIN
INSERT INTO ##PEDIDOS (VALOR) VALUES (@N+50)
SET @N = @N + 1
END


WHILE (SELECT COUNT(*) FROM ##PEDIDOS) > 0
BEGIN
DELETE TOP(50) FROM ##PEDIDOS
END



Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero
la pregunta es: como los borro? no puedo hacer delete top 1000 y borrarlos
de cada vez, tiene un campo ID pero hacer un SELECT TOP 1000
@MAX_ID=MAX(ID) y luego un DELETE FROM ... WHERE ID<@MAX_ID eso en un
recorrido de un cursor...

Pero no hay otra forma?

Saludos

Carlos


Respuesta Responder a este mensaje
#3 Jorge Gonzalez
10/05/2006 - 18:02 | Informe spam
SQL SERVER tiene una característica llamada query governor que evita la
ejecución de queries con un costo mayor a cierto parámetro configurable. Tu
consulta está excediendo este costo.

Estás ejecutando esta consulta de forma periódica? o es una sóla vez?

Se me ocurre un código poco inteligente pero que probablemente te funcione

select top 150000 ID into #tmp
from Tabla
where.

Delete from Tabla
from Tabla T1 inner join #tmp T2 on T1.ID = T2.ID

Delete from Tabla
Where.

Drop table #tmp

de esta forma vas a borrar los primeros 150 mil registros que ingresaste a
la tabla temporal ( eso no va a exceder el parámetro del query governor) y
luego borrás el resto de registros con el where normal y borrás la tabla
temporal

esta es una solución poco elegante pero estoy seguro que te funcionará.

Se agradecen sugerencias

Jorge González

"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero
la pregunta es: como los borro? no puedo hacer delete top 1000 y borrarlos
de cada vez, tiene un campo ID pero hacer un SELECT TOP 1000
@MAX_ID=MAX(ID) y luego un DELETE FROM ... WHERE ID<@MAX_ID eso en un
recorrido de un cursor...

Pero no hay otra forma?

Saludos

Carlos


Respuesta Responder a este mensaje
#4 Miguel Egea
10/05/2006 - 20:33 | Informe spam
Norman!!!! cuanto tiempo sin leerte, encantado de volver a verte, ¿por donde
andas? ¿Que haces ahora?
"Norman" escribió en el mensaje
news:
SET ROWCOUNT 1000 -- o la cantidad de records que quieras borrar en cada
pase
delete from dbo.TuTabla
where ...

while @@rowcount > 0
delete from dbo.TuTabla
where ...

SET ROWCOUNT 0



Saludos,


Norman




"CHAR72" <char72[nos pa m]@gmail.com> wrote in message
news:
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero
la pregunta es: como los borro? no puedo hacer delete top 1000 y
borrarlos de cada vez, tiene un campo ID pero hacer un SELECT TOP 1000
@MAX_ID=MAX(ID) y luego un DELETE FROM ... WHERE ID<@MAX_ID eso en un
recorrido de un cursor...

Pero no hay otra forma?

Saludos

Carlos






Respuesta Responder a este mensaje
#5 Norman
10/05/2006 - 21:07 | Informe spam
Hola Miguel!!!!!

Mucho gusto en verlos a todos de nuevo, y veo que de los viejos quedan
bastantes,

Sigo haciendo lo mismo, pero estube bastante tiempo trabajando arriba de los
barcos.
Yo trabajo en una compania que suministra y le presta servicios a barcos
cruceros (comida, bebida, restaurant, cocineros, bartenders etc...).
Tambien estamos tratando de cambiar los sistemas que tenenemos para la nueva
tecnologia NET y entonces estoy estudiando y actualizandome, el cambio es
bastante fuerte ya que tenemos bastantes aplicaciones y queremos
desarrollarlas de nuevo completamente desde cero.
Queremos despedirnos del viejo VB6

Me alegro que esten por aqui, y ahora tratare de participar mas seguido.


Saludos



Norman.. :-)






"Miguel Egea" wrote in message
news:eC$
Norman!!!! cuanto tiempo sin leerte, encantado de volver a verte, ¿por
donde andas? ¿Que haces ahora?
"Norman" escribió en el mensaje
news:
SET ROWCOUNT 1000 -- o la cantidad de records que quieras borrar en cada
pase
delete from dbo.TuTabla
where ...

while @@rowcount > 0
delete from dbo.TuTabla
where ...

SET ROWCOUNT 0



Saludos,


Norman




"CHAR72" <char72[nos pa m]@gmail.com> wrote in message
news:
Hola tengo un DTS y necesito borrar mas de 300 mil registros segun un
criterio, la cuestion es que cuando lo intento tengo el siguiente error:

(Microsoft OLE DB Provider for SQL Server (80040e14): The query has been
canceled because the estimated cost of this query (72) exceeds the
configured threshold of 60. Contact the system administrator.)

No es mi servidor y supongo que al dueño no le apetece que se haga, pero
la pregunta es: como los borro? no puedo hacer delete top 1000 y
borrarlos de cada vez, tiene un campo ID pero hacer un SELECT TOP 1000
@MAX_ID=MAX(ID) y luego un DELETE FROM ... WHERE ID<@MAX_ID eso en
un recorrido de un cursor...

Pero no hay otra forma?

Saludos

Carlos










Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida