delete con top..

24/04/2004 - 01:14 por ONIL | Informe spam
Hola a todos..!

Me parece que este es un foro estupendo...!

Bueno entrando en materia..!
tengo una duda...

(disculpen lo simple de la pregunta pero le he dado vueltas y nomas no le
encuentro..)

a) Como puedo a traves de T-SQL borrar solo un numero determinado de
registros...
e intentado esto

delete from tabla where (select top 5 * from tabla)

pero me marca un error de sintaxis en el parentesis que cierra la
instrucción..
serian tan amables de iluminar mi camino

De antemano.. muchas gracias...

(\__/)
(=':'=)
(")_(")
ONil@.
MX.

Preguntas similare

Leer las respuestas

#11 Diego Uribe
26/04/2004 - 22:06 | Informe spam
Semejante polemica por borrar los 10 primeros registros de una tabla.

lo mejor es como dice Isaias

SET ROWCOUNT 10
delete from tabla
SET ROWCOUNT 0

y se acabo el problema.

sino, pruebenlo

Create table test (a char(10) not null, b char(10) not null);
/*Ejecutar varias veces:*/
insert into test values ('a','b');
insert into test values ('b','c');
insert into test values ('c','d');
insert into test values ('d','e');
insert into test values ('e','r');
insert into test values ('a','f');
insert into test values ('f','g');
insert into test values ('g','z');
insert into test values ('a','w');
insert into test values ('c','d');
/*Hasta aqui*/
select count(*) from test /* Repitan las 10 lineas anteriores hasta que les
de unos 300 registros */

ahora borrenlos y me cuentan...







"Maximiliano Damian Accotto" escribió
en el mensaje news:
Hola, si funciona pero yo no lo usaria, quizas en futuras versiones no
exista mas ;-)


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>


escribió
en el mensaje news:
> Set rowcount para delete directos sobre tablas locales funciona perfecto
si
> no tienes triggers que generen otras operaciones los cuales pueden tener
> problemas porque también están limitados al número de registros que has
> indicado tal como dice la documentación que has copiado.
>
> Jose Mariano Alvarez
> jose (.) alvarez * *Arroba* * mug (.) org (.) ar
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
> .
> "Maximiliano Damian Accotto" wrote


in
> message news:
> > Hola amigo Isaias!! perdon no!! lo mio solo fue un ejemplo y te quiero
> > comentar algo:
> >
> > Extraido del BOL:
> >
> > Observaciones
> > Es recomendable que las instrucciones DELETE, INSERT y UPDATE que
> > actualmente utilizan SET ROWCOUNT se vuelvan a escribir con la


sintaxis
> TOP.
> > Para obtener más información, consulte DELETE, INSERT o UPDATE.
> >
> > La configuración de la opción SET ROWCOUNT se ignora en las
instrucciones
> > INSERT, UPDATE y DELETE con tablas remotas y vistas divididas remotas


y
> > locales.
> >
> > Para desactivar esta opción (de modo que se devuelvan todas las


filas),
> > especifique SET ROWCOUNT 0.
> >
> >
> >
> > Nota Al establecer la opción SET ROWCOUNT, la mayoría de las
> instrucciones
> > Transact-SQL dejarán de procesarse cuando hayan afectado al número de
> filas
> > especificado. Ello incluye a los desencadenadores y a las


instrucciones
> que
> > modifican datos, como INSERT, UPDATE y DELETE. La opción ROWCOUNT no
tiene
> > efecto en los cursores dinámicos, pero limita el conjunto de filas de
los
> > cursores de conjunto de claves y los que no distinguen. Esta opción se
> debe
> > usar con cuidado y, principalmente, con la instrucción SELECT.
> >
> >
> > SET ROWCOUNT anula la palabra clave TOP de la instrucción SELECT si el
> > número de filas es inferior.
> >
> > La opción SET ROWCOUNT se establece en tiempo de ejecución, no en


tiempo
> de
> > análisis.
> >
> >
> >
> > ==> > >
> >
> >
> > Yo no usaria set Rowcount, quizas en nuevas versiones no este mas ;-)
> >
> >
> >
> >
> >
> > Salu2 enormes
> >
> > Maximiliano Damian Accotto
> >
> > Fundicion San Cayetano S.A.
> > Gerente de IT
> > Buenos Aires - Argentina
> > -
> > Desarrollador 3 estrellas
> >
http://www.microsoft.com/spanish/ms...efault.asp
> > -
> > (maxi_accotto[arroba]speedy.com.ar)
> > MSN:
> > -
> >
> > "Isaías" escribió en el mensaje
> > news:38da01c4298b$da085a70$
> > > Diego/Maxi
> > >
> > > Amigos, eso es mas simple que hacer un WHILE y no se que
> > > tantas cosas.
> > >
> > > SET ROWCOUNT 10 -- ESTABLEZCO A 10 EL CONTEO
> > > DELETE MyTabla -- SOLO BORRO 10 REGISTROS
> > > SET ROWCOUNT 0 -- REGRESO EL CONTEO
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#12 Maximiliano D. A.
27/04/2004 - 14:30 | Informe spam
no estoy para nada de acuerdo con eso!! Microsoft no recomienda esa
instruccion y es mas, recomienda que el que la este usando vaya migrando a
TOP, pero bueno eso es lo que recomienda el fabricante nomas, no quiere
decir que no se pueda usar ni mucho menos ;-), luego si en futuras versiones
se encuentran con querys que no funcionan, Microsoft Dira: Ojo esto te lo
avise y te dije que migres y vos no me hicistes caso ;-)

Suerte


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Diego Uribe" escribió en el mensaje
news:
Semejante polemica por borrar los 10 primeros registros de una tabla.

lo mejor es como dice Isaias

SET ROWCOUNT 10
delete from tabla
SET ROWCOUNT 0

y se acabo el problema.

sino, pruebenlo

Create table test (a char(10) not null, b char(10) not null);
/*Ejecutar varias veces:*/
insert into test values ('a','b');
insert into test values ('b','c');
insert into test values ('c','d');
insert into test values ('d','e');
insert into test values ('e','r');
insert into test values ('a','f');
insert into test values ('f','g');
insert into test values ('g','z');
insert into test values ('a','w');
insert into test values ('c','d');
/*Hasta aqui*/
select count(*) from test /* Repitan las 10 lineas anteriores hasta que


les
de unos 300 registros */

ahora borrenlos y me cuentan...







"Maximiliano Damian Accotto" escribió
en el mensaje news:
> Hola, si funciona pero yo no lo usaria, quizas en futuras versiones no
> exista mas ;-)
>
>
> Salu2 enormes
>
> Maximiliano Damian Accotto
>
> Fundicion San Cayetano S.A.
> Gerente de IT
> Buenos Aires - Argentina
> -
> Desarrollador 3 estrellas
>


http://www.microsoft.com/spanish/ms...efault.asp
> -
> (maxi_accotto[arroba]speedy.com.ar)
> MSN:
> -
>
> "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
escribió
> en el mensaje news:
> > Set rowcount para delete directos sobre tablas locales funciona


perfecto
> si
> > no tienes triggers que generen otras operaciones los cuales pueden


tener
> > problemas porque también están limitados al número de registros que


has
> > indicado tal como dice la documentación que has copiado.
> >
> > Jose Mariano Alvarez
> > jose (.) alvarez * *Arroba* * mug (.) org (.) ar
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> > .
> > "Maximiliano Damian Accotto"


wrote
in
> > message news:
> > > Hola amigo Isaias!! perdon no!! lo mio solo fue un ejemplo y te


quiero
> > > comentar algo:
> > >
> > > Extraido del BOL:
> > >
> > > Observaciones
> > > Es recomendable que las instrucciones DELETE, INSERT y UPDATE que
> > > actualmente utilizan SET ROWCOUNT se vuelvan a escribir con la
sintaxis
> > TOP.
> > > Para obtener más información, consulte DELETE, INSERT o UPDATE.
> > >
> > > La configuración de la opción SET ROWCOUNT se ignora en las
> instrucciones
> > > INSERT, UPDATE y DELETE con tablas remotas y vistas divididas


remotas
y
> > > locales.
> > >
> > > Para desactivar esta opción (de modo que se devuelvan todas las
filas),
> > > especifique SET ROWCOUNT 0.
> > >
> > >
> > >
> > > Nota Al establecer la opción SET ROWCOUNT, la mayoría de las
> > instrucciones
> > > Transact-SQL dejarán de procesarse cuando hayan afectado al número


de
> > filas
> > > especificado. Ello incluye a los desencadenadores y a las
instrucciones
> > que
> > > modifican datos, como INSERT, UPDATE y DELETE. La opción ROWCOUNT no
> tiene
> > > efecto en los cursores dinámicos, pero limita el conjunto de filas


de
> los
> > > cursores de conjunto de claves y los que no distinguen. Esta opción


se
> > debe
> > > usar con cuidado y, principalmente, con la instrucción SELECT.
> > >
> > >
> > > SET ROWCOUNT anula la palabra clave TOP de la instrucción SELECT si


el
> > > número de filas es inferior.
> > >
> > > La opción SET ROWCOUNT se establece en tiempo de ejecución, no en
tiempo
> > de
> > > análisis.
> > >
> > >
> > >
> > > ==> > > >
> > >
> > >
> > > Yo no usaria set Rowcount, quizas en nuevas versiones no este mas


;-)
> > >
> > >
> > >
> > >
> > >
> > > Salu2 enormes
> > >
> > > Maximiliano Damian Accotto
> > >
> > > Fundicion San Cayetano S.A.
> > > Gerente de IT
> > > Buenos Aires - Argentina
> > > -
> > > Desarrollador 3 estrellas
> > >
>


http://www.microsoft.com/spanish/ms...efault.asp
> > > -
> > > (maxi_accotto[arroba]speedy.com.ar)
> > > MSN:
> > > -
> > >
> > > "Isaías" escribió en el


mensaje
> > > news:38da01c4298b$da085a70$
> > > > Diego/Maxi
> > > >
> > > > Amigos, eso es mas simple que hacer un WHILE y no se que
> > > > tantas cosas.
> > > >
> > > > SET ROWCOUNT 10 -- ESTABLEZCO A 10 EL CONTEO
> > > > DELETE MyTabla -- SOLO BORRO 10 REGISTROS
> > > > SET ROWCOUNT 0 -- REGRESO EL CONTEO
> > >
> > >
> > >
> >
> >
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.661 / Virus Database: 424 - Release Date: 20/04/2004
Respuesta Responder a este mensaje
#13 ONIL
27/04/2004 - 22:27 | Informe spam
Hola a todos..!
No pense generar tanta polemica .. pero ademas ha sido muy enriquecedor..!

El problema :
a) A traves de una consulta ADO se genera una tabla temporal con mas de
600,000 registros, mismos que debo vaciar a hojas de excel..(pero como todos
uds. saben excel unicamente llega hasta 55,000 renglones asi que tenia que
enviar los primeros 55,000 borrarlos y asi sucesivamente...
b) Los registros no tienen un identificador unico

La solucion :

a) Agregarle a la tabla un identity
ALTER TABLE Resultados ADD id_num int IDENTITY(1,1)

b) Y utilizar entonces :
DELETE Resultados
FROM (SELECT TOP 20 * FROM Resultados) AS t1
WHERE Resultados.id_num = t1.id_num

Muchas, Muchisimas gracias a todos aquellos que contestaron este hilo..

Reciban mil salu2.

(\__/)
(=':'=)
(")_(")

MX.
"ONIL@" wrote in message
news:
Hola a todos..!

Me parece que este es un foro estupendo...!

Bueno entrando en materia..!
tengo una duda...

(disculpen lo simple de la pregunta pero le he dado vueltas y nomas no


le
encuentro..)

a) Como puedo a traves de T-SQL borrar solo un numero determinado de
registros...
e intentado esto

delete from tabla where (select top 5 * from tabla)

pero me marca un error de sintaxis en el parentesis que cierra la
instrucción..
serian tan amables de iluminar mi camino

De antemano.. muchas gracias...

(\__/)
(=':'=)
(")_(")

MX.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida