EL USO DE CURSORES

06/02/2007 - 16:40 por David Ruiz | Informe spam
Buenas a todos,

Se que muchos de vosotros desaconsejais el uso de cursores.

Debe ser por mi falta de conocimientos, pero yo no encuentro solucion a
bastantes de mis "problemas", o mejor dicho consultas, si no es usando los
cursores.


Como ejemplo tonto... ¿como se resolveria esto sin el uso de cursores??


Tengo dos tablas (1-n) una con nombres de usuarios (dbo.usuarios) y otra con
los cursos que tiene (dbo.cursos).
Y quiero sacar un listado pero en dos columnas, la primera con el nombre de
usuario y la segunda con TODOS sus cursos.

COLUMN1 COLUMN2

usuario1 curso1, curso2, curso3...
usuario2 curso1, curso2, curso3...


Os digo lo que yo hago.

1 - Creo una tabla temporal (usuario, cursos).
2 - Creo un cursor para recorrer la tabla cursos por cada usuario, y dentro
del cursor voy Concatenando los cursos de un mismo usuario.
3 - Inserto en la tabla temporal.
4 - Muestro el resultado.

Esto para lo "poco" que es, tiene una carga de trabajo bastante considerable.

SQL Server 2000

Muchas gracias!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
06/02/2007 - 17:10 | Informe spam
Hola David,

Ese ejemplo no tiene nada de tonto. Existen varias formas de alcanzar lo que
deseas en la version 2000 y aca te paso un link donde se analizan un grupo de
ellas. En la version 2005 se puede hacer con un CTE recursiva o con la ya
famosa "select ... from xml path('')".

Concatenating row values in Transact-SQL
http://www.projectdmx.com/tsql/rowconcatenate.aspx


AMB

"David Ruiz" wrote:

Buenas a todos,

Se que muchos de vosotros desaconsejais el uso de cursores.

Debe ser por mi falta de conocimientos, pero yo no encuentro solucion a
bastantes de mis "problemas", o mejor dicho consultas, si no es usando los
cursores.


Como ejemplo tonto... ¿como se resolveria esto sin el uso de cursores??


Tengo dos tablas (1-n) una con nombres de usuarios (dbo.usuarios) y otra con
los cursos que tiene (dbo.cursos).
Y quiero sacar un listado pero en dos columnas, la primera con el nombre de
usuario y la segunda con TODOS sus cursos.

COLUMN1 COLUMN2

usuario1 curso1, curso2, curso3...
usuario2 curso1, curso2, curso3...


Os digo lo que yo hago.

1 - Creo una tabla temporal (usuario, cursos).
2 - Creo un cursor para recorrer la tabla cursos por cada usuario, y dentro
del cursor voy Concatenando los cursos de un mismo usuario.
3 - Inserto en la tabla temporal.
4 - Muestro el resultado.

Esto para lo "poco" que es, tiene una carga de trabajo bastante considerable.

SQL Server 2000

Muchas gracias!
Respuesta Responder a este mensaje
#2 Consultas
11/02/2007 - 22:21 | Informe spam
Hola David ,

El uso de cursores es totalmente toxico para mantener una buena performance
en tu bd a través del tiempo (te hablo de 5 o 10 años en adelante..si no es
menos dependiendo que tan concurridas sean tus consultas...), siempre que
trabajes con consultas intensas y en las que no encuentres una solucion
"rapida" es preferible pensarlo mejor e intentar nuevas formas (1000 veces
es mejor!!!!), el Transact SQL te da innumerables herramientas que puedes
usar para poder llegar a tu objetivo... ten en cuenta que al implementar un
store procedure o una vista o una funcion debes pensar no solo en que "te
salga y punto" , hay otras personillas por alli llamadas Administradores de
Base de Datos como yo que las vemos verdes cuando alguien como tu "no se
tomo un tiempito mas para pensar en otra solucion..". al final de un
tiempo tu trabajo sera reducido a nada poque yo tendre que rehacerlo cuando
se caiga la base por la concurrencia y la cantidad enorme de datos
almacenados en ella...tu cursor puede ser inofensivo cuando solo trabaja con
pocos datos peroal final sera mortal...
Trata de estudiar algun cursillo de SQL programming, donde te den trucos
para resolver estos problemas...

Suerte cachorro!!



"David Ruiz" escribió en el mensaje
news:
Buenas a todos,

Se que muchos de vosotros desaconsejais el uso de cursores.

Debe ser por mi falta de conocimientos, pero yo no encuentro solucion a
bastantes de mis "problemas", o mejor dicho consultas, si no es usando los
cursores.


Como ejemplo tonto... ¿como se resolveria esto sin el uso de cursores??


Tengo dos tablas (1-n) una con nombres de usuarios (dbo.usuarios) y otra
con
los cursos que tiene (dbo.cursos).
Y quiero sacar un listado pero en dos columnas, la primera con el nombre
de
usuario y la segunda con TODOS sus cursos.

COLUMN1 COLUMN2

usuario1 curso1, curso2, curso3...
usuario2 curso1, curso2, curso3...


Os digo lo que yo hago.

1 - Creo una tabla temporal (usuario, cursos).
2 - Creo un cursor para recorrer la tabla cursos por cada usuario, y
dentro
del cursor voy Concatenando los cursos de un mismo usuario.
3 - Inserto en la tabla temporal.
4 - Muestro el resultado.

Esto para lo "poco" que es, tiene una carga de trabajo bastante
considerable.

SQL Server 2000

Muchas gracias!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida