none
Duda con SP! RRS feed

  • Pregunta

  • Buen dia,

    Me puede ayudar, porque este SP no me realiza el update!, con el print me muestra que los datos los reciben las variables de manera adecuada, pero no realiza el proceso,

    Que pasa!?

    alter

    PROCEDURESP_USR_ActSalpen

    @cod_emp

    char(15),

    @tipo_fdo

    char(15),


    @nuevo_fdo

    char(15)



    AS

    BEGIN

    SETNOCOUNTON;


    if@tipo_fdo=1

    select@tipo_fdo='fdo_sal'


    else


    select@tipo_fdo='fdo_pen'

    print@tipo_fdo

     

    print@nuevo_fdo

      

    print  @cod_emp

        

    updaterhh_hisss set@tipo_fdo=@nuevo_fdo wherecod_emp=@cod_emp

    --update rhh_hisss set fdo_sal='214' where cod_emp='42689025'


    Select*fromrhh_hisss wherecod_emp=@cod_emp andfdo_sal=@nuevo_fdo


    END

    GO

    jueves, 31 de agosto de 2017 21:59

Respuestas

  • Muchas gracia!

    Realice los siguientes cambios

    @cod_emp nvarchar(15)='',
      @tipo_fdo nvarchar(15)='',
      @nuevo_fdo nvarchar(15)=''

    SET @strSQL = 'update rhh_hisss set '+ @tipo_fdo +'='+ @nuevo_fdo + ' where  cod_emp='''+@cod_emp+''''
     print @strSQL

    El print era para probar que saliera bien mientras probaba, asi ya funciono.

    @

    • Marcado como respuesta Moderador M martes, 5 de septiembre de 2017 18:52
    viernes, 1 de septiembre de 2017 13:10

Todas las respuestas

  • supongo que el if va de la mano con un condicion y luego then

    CREATE  PROCEDURE `sp_Compras_x_Insumo`(filtro int,unidadneg
    varchar(500),
    idarticulos varchar(10000),
    fini varchar(15),
    ffin varchar(15))
    begin
    declare xcadenagen longtext;
    set session group_concat_max_len = 1000000;

    if filtro = 0 then
        set xcadenagen = (select concat('
    select t.nombre,a.idarticulos,a.descrip1,date_format(i.fproceso, ',"'%d/%m/%y'",') as fproceso,p.razonsocial,sum(round(id.cantidad1,2)) as cantidad,u.nomcompleto,
        round(if(id.porc_igv>0,id.precio*((id.porc_igv/100)+1),id.precio),4) as precio,format( round (sum(if(id.porc_igv>0,total,vcompra)),2),2) as total ,format( x.cantotal,2) as cantotal,format(x.montototal,2) as  montototal
        from ingproddetalle id
        inner join ingresosprod i on i.idingprod = id.idingprod
        inner join articulos a on a.idarticulos = id.idarticulos
        inner join proveedores p on p.idproveedores = i.idproveedores
        inner join tienda t on t.idtienda = i.idtienda
        inner join almacenes al on al.idtienda = t.idtienda
        inner join unidadmed u on u.idunidadmed = a.idunidadmed0
        inner join (select xid.idarticulos,sum(round(xid.cantidad1,2)) as cantotal,
                                sum(if(xid.porc_igv>0,round(xid.total,2),round(xid.vcompra,2))) as montototal
                                from ingproddetalle xid
                                inner join ingresosprod xi on xi.idingprod = xid.idingprod
                                where xi.fproceso between ',"'",fini,"'",' and ',"'",ffin,"'",' and xi.idalmacen in (',unidadneg,') and xid.idarticulos in (',idarticulos,') and xi.idtipomovimiento=2 and xi.activo=1
                                group by xid.idarticulos ) x on  x.idarticulos = id.idarticulos
        where i.fproceso between ',"'",fini,"'",' and ',"'",ffin,"'",'  and i.idtipomovimiento = 2 and i.activo=1
        and id.idarticulos in (',idarticulos,') and al.idalmacen in (',unidadneg,')
        group by t.nombre,a.idarticulos,a.descrip1,i.fproceso,p.razonsocial
        order by t.nombre asc,a.descrip1 asc ,i.fproceso asc;'));

    ELSEIF filtro = 1 then
        set xcadenagen = (select concat(' select ',@variable,';'));
    else
            set xcadenaupdate= (select concat(' update rhh_hisss set@tipo_fdo=@nuevo_fdo where cod_emp=',@cod_emp,';'));
    end if;
    set @myquery = xcadenaupdate;
    prepare stmt2 from @myquery;
    execute stmt2;
    deallocate prepare stmt2;

            set xcadenaselect = (select concat('Select*fromrhh_hisss wherecod_emp=',@cod_emp,' andfdo_sal=',@nuevo_fdo,';'));
    end if;
    set @myquery = xcadenaselect ;
    prepare stmt2 from @myquery;
    execute stmt2;
    deallocate prepare stmt2;

    end;

    Estas tratando de haer un update y un select en la misma condicion no te va salir a menos de que crees un paquete en SQLServer , pero yo lo hago asi en Mysql prueba si te sirve .


    Pasa los puntos prro v:

    jueves, 31 de agosto de 2017 22:35
  • El select es para probar de una vez si actualizo, ya me di cuenta que si en el  update lo dejo con el nombre directo de la columna si funciona

    update rhhhisss set fdo_sal=@nuevo_fdo wherecod_emp=@cod_emp

    Porque puede ser eso, que con la variable no tome bien la columna para el set?

    jueves, 31 de agosto de 2017 22:58
  • nose yo no conosco tu tabla pero si muestras sabria si estas colocandolo mal.

    Pasa los puntos prro v:

    jueves, 31 de agosto de 2017 23:08
  • prueba poner sin el arroba es para crear variables en el mismo procedimiento ...

    Pasa los puntos prro v:

    jueves, 31 de agosto de 2017 23:09
  • Porque puede ser eso, que con la variable no tome bien la columna para el set?

    Porque en T-SQL no se puede usar variables como identificadores de tablas, columnas, bases de datos, etc.

    Ejemplo (uso incorrecto de variables como identificadores de objetos de la db):

    -- 1
    declare @db sysname = N'tempdb';

    USE @db;
    GO

    --2
    declare @tabla sysname = N'usuarios';

    select * from @tabla where id = 123;
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    viernes, 1 de septiembre de 2017 12:37
  • Muchas gracia!

    Realice los siguientes cambios

    @cod_emp nvarchar(15)='',
      @tipo_fdo nvarchar(15)='',
      @nuevo_fdo nvarchar(15)=''

    SET @strSQL = 'update rhh_hisss set '+ @tipo_fdo +'='+ @nuevo_fdo + ' where  cod_emp='''+@cod_emp+''''
     print @strSQL

    El print era para probar que saliera bien mientras probaba, asi ya funciono.

    @

    • Marcado como respuesta Moderador M martes, 5 de septiembre de 2017 18:52
    viernes, 1 de septiembre de 2017 13:10