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

Store Procedure select "dinamico"

Estas en el tema de Store Procedure select "dinamico" en el foro de SQL Server en Foros del Web. hola amigos una ayudita pliss tengo un select "dinamico": set @cadp1 = 'Select TOP 1 A.CAMPO019, A.CAMPO034 , A.CAMPO035 From TAB011 A left outer join ...
  #1 (permalink)  
Antiguo 09/04/2008, 10:26
 
Fecha de Ingreso: febrero-2008
Mensajes: 11
Antigüedad: 16 años, 2 meses
Puntos: 0
Store Procedure select "dinamico"

hola amigos
una ayudita pliss

tengo un select "dinamico":

set @cadp1 = 'Select TOP 1 A.CAMPO019, A.CAMPO034 , A.CAMPO035
From TAB011 A left outer join TAB006 B ON A.campo014=B.Campo001
Where A.CAMPO003<''01/01/2007'' AND A.CAMPO014='''+@pCodigo+'''
order by a.campo003 desc,a.campo016 desc,a.campo001 desc,
a.campo002 desc,a.campo050 desc'

pero quiro que me devuelva ese resukltado en variables output en un solo select se puede hacer ?????

lo quise hacer asi pero me no m devuleve en la variable output

CREATE PROCEDURE USP_INV_MOVIMIENTOSALINICIAL
@pCodigo as varchar(25),
@psalcant numeric(16,10) output,
@pscostsl numeric(16,10) output,
@pscostus numeric(16,10) output
AS
declare
@cadp1 varchar(500),



-------------*************calculo saldo inicial ********************
set @cadp1='Select TOP 1 ''+@psalcant+''=A.CAMPO019 ,
''+@pscostsl+''=A.CAMPO034 , ''+@pscostus+''=A.CAMPO035
From TAB011 A left outer join TAB006 B ON A.campo014=B.Campo001
Where A.CAMPO014='''+@pCodigo+''' AND A.CAMPO003<'01/01/2007'
order by a.campo003 desc,a.campo016 desc,
a.campo001 desc,a.campo002 desc,a.campo050 desc'

exec(@cadp1)
  #2 (permalink)  
Antiguo 09/04/2008, 11:57
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Re: Store Procedure select "dinamico"

Si realmente debes usar SQL dinámico, usa el store SP_EXECUTESQL. Te permitirá definir variables de tipo OUTPUT.
Sin embargo, por el código que expones, te estás complicando demasiado la existencia. Tu consulta no amerita el uso de sql dinámico en manera alguna. Sólo tienes una variable para afectar el resultado, y ésta no define ningún path de ejecución distinto. Esto debería funcionar:
Código:
CREATE PROCEDURE USP_INV_MOVIMIENTOSALINICIAL
(
    @pCodigo as varchar(25),
    @psalcant numeric(16,10) output,
    @pscostsl numeric(16,10) output,
    @pscostus numeric(16,10) output
)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT        TOP 1
                @psalcant = A.CAMPO019,
                @pscostsl = A.CAMPO034,
                @pscostus = A.CAMPO035
    FROM        TAB011 A
    LEFT JOIN    TAB006 B
                ON A.campo014 = B.Campo001
    WHERE        A.CAMPO014 = @pCodigo
                AND A.CAMPO003 < '20070101'
    ORDER BY    a.campo003 desc, 
                a.campo016 desc,
                a.campo001 desc,
                a.campo002 desc,
                a.campo050 desc
END
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 15:00.