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!
 

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!

Preguntas similares