Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Cursor T-SQL

Estas en el tema de Cursor T-SQL en el foro de SQL Server en Foros del Web. Necesito crear un cursor en un SP, pero a partir de la generación de una consulta que armo a través de variables, ejemplo: declare @sqltext ...
  #1 (permalink)  
Antiguo 21/07/2006, 08:07
Avatar de juantux  
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años, 1 mes
Puntos: 1
Cursor T-SQL

Necesito crear un cursor en un SP, pero a partir de la generación de una consulta que armo a través de variables, ejemplo:

declare @sqltext varchar(500)
set @sqltext = 'select campo1, campo2 from tabla '
if @param = 'A'
begin
set @sqltext = @sqltext + ' where campo_filtro = ''' + @varaux
end

/* Aca viene lo que quiero hacer */
declare cursor_aux cursor for
select @sqltext --Esto no funciona bien!!!!

open cursor_aux
fetch next from cursor_aux into @campo1, @campo2

while @@fetch_status=0
begin
/* Dentro de este otro ciclo debo hacer lo mismo pero con otra consulta */
end

OJALA PUEDAN ECHARME UNA MANO, GRACIAS...
  #2 (permalink)  
Antiguo 21/07/2006, 08:24
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
asi no se puede.

podrias hacer una tabla temporal. y en ella almacenar el contenido de tu sql dinamico, ejecutandolo con un EXECUTE (@strSQL) o un executesql.


Código:
Declare @sqltext varchar(8000)

If Object_id('tempdb..#tmpCursor') is not null
   Drop table #tmpCursor

Create table #tmpCursor 
(
    campo1 tipo1,
    campo2 tipo2
)

Set @sqltext = 'Insert into #tmpCursor select campo1, campo2 from tabla '

If @param = 'A'
    Set @sqltext = @sqltext + ' where campo_filtro = ''' + @varaux

Execute(@sqltext)

-- Cuando no tiene nada la tabla es mejor salir.
If (Select count(*) from #tmpCursor (nolock)) = 0
    goto Final

Declare cursor_aux cursor for 
Select * from #tmpCursor (nolock)

Open cursor_aux
fetch next from cursor_aux into @campo1, @campo2

While @@fetch_status=0
Begin
     -- Aqui deberia funcionar correcto el cursor.  
End

Final:

If Object_id('tempdb..#tmpCursor') is not null
   Drop table #tmpCursor
  #3 (permalink)  
Antiguo 21/07/2006, 08:28
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
aunque si el sql dinamico solo lo utilizas para el filtro de la misma tabla podrias utilizar un case en el select de la tabla

Código:
Set @Param = isnull(@Param,'')

Select campo1, campo2 
From tabla (nolock)
Where filtro = (case when @Param <> '' Then @Param Else filtro End)
  #4 (permalink)  
Antiguo 21/07/2006, 08:38
Avatar de juantux  
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años, 1 mes
Puntos: 1
Cursor T-SQL

Muchas gracias estimado, pero la alternativa de la tabla temporal me es mucho mas efectiva.. muchas gracias por tu ayuda....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:23.