none
Pasar datos de una lista RRS feed

  • Pregunta

  •            Como puedo lograr que una sentencia In me lea los datos que le envio en una lista ? ej:

                     declare @Lista as char(30)
                     set @lista='''76505350'',''99555220'''

                      SELECT REPLACE(@lista, ' ', '')as lista
                      print @lista
                      Select a.RutCli,b.AnaNom,a.Rol,sum(a.Cantidad) as Total,a.UnidadMedida 
                      from CabGuia a inner join FRU_FORESTAL.dbo.ANACTA b on a.RutCli=b.AnaCod
                      where FGuia between '01-10-2017' and '25-10-2017' and a.CodCarga ='CAR0005'
                      and a.RutCli in( @Lista  )
                      GROUP BY a.RutCli,b.AnaNom,a.Rol,a.UnidadMedida 

                       Gracias

    • Cambiado Enrique M. Montejo sábado, 25 de noviembre de 2017 7:30 Pregunta relacionada con T-SQL.
    jueves, 23 de noviembre de 2017 15:03

Respuestas

  • La mejor solución va a depender de cual sea el origen de la lista de valores, podrías contenerlo en una variable de tipo tabla o definiendo un tipo, o cualquier otro medio con el objetivo de evitar ejecutar una consulta con sql dinámico.

    Bajo lo que muestras, lo que queda es contener la consulta sql en una cadena de caracteres e intentar ejecutarla mediante el procedimiento almacenado de sistema 'sp_executesql'.

    DECLARE @Lista nvarchar(4000) = '''76505350'',''99555220''';
    DECLARE @FechaInicio date = '20171001';
    DECLARE @FechaFin date = '20171001';
    DECLARE @CodCarga nvarchar(100) = 'CAR0005'
    DECLARE @Query nvarchar(4000) = N'
        SELECT a.RutCli, b.AnaNom, a.Rol, SUM(a.Cantidad) AS Total, a.UnidadMedida
        FROM 
    	   CabGuia a
    	   INNER JOIN FRU_FORESTAL.dbo.ANACTA b ON a.RutCli = b.AnaCod
        WHERE 
    	   FGuia BETWEEN @FechaInicio AND @FechaFin
    	   AND a.CodCarga = @CodCarga AND a.RutCli IN(' + @Lista + ')
        GROUP BY a.RutCli, b.AnaNom, a.Rol, a.UnidadMedida;';
    
    EXECUTE sp_executesql @Query, N'@FechaInicio date, @FechaFin date, @CodCarga nvarchar(100)',
    		  @FechaInicio, @FechaFin, @CodCarga;
    GO

    jueves, 23 de noviembre de 2017 17:18

Todas las respuestas

  • creo que @Lista no funcionara

    mejor crea una tabla temporal o variable tabla asi y lo consultas

    Declare @MiLista Table (
     Id int,
     rutCli varchar(30)
    )

    en el in



    • Editado greg_dorian jueves, 23 de noviembre de 2017 15:28
    jueves, 23 de noviembre de 2017 15:16
  • Un fragmento de mi codigo en mysql derepente te sirve.

    declare v_iddescuentoscondicional LONGTEXT;

    set group_concat_max_len=9999999999999999999;

    -- lleno mis iddescuentos

    select GROUP_CONCAT(blp.iddescuentos) from pl_boletapagodet blp 
    where blp.iddescuentos is not null and blp.idboletapago=vidboletapago into v_iddescuentoscondicional;

    -- envio los codidos de iddescuento para eliminar

    set @mysql=concat("delete from pl_boletapagodet where  idboletapago='",vidboletapago,"' and  iddescuentos in(",v_iddescuentoscondicional,");");

    prepare queryprocess from @mysql;
    EXECUTE queryprocess;

    jueves, 23 de noviembre de 2017 15:37
  • La mejor solución va a depender de cual sea el origen de la lista de valores, podrías contenerlo en una variable de tipo tabla o definiendo un tipo, o cualquier otro medio con el objetivo de evitar ejecutar una consulta con sql dinámico.

    Bajo lo que muestras, lo que queda es contener la consulta sql en una cadena de caracteres e intentar ejecutarla mediante el procedimiento almacenado de sistema 'sp_executesql'.

    DECLARE @Lista nvarchar(4000) = '''76505350'',''99555220''';
    DECLARE @FechaInicio date = '20171001';
    DECLARE @FechaFin date = '20171001';
    DECLARE @CodCarga nvarchar(100) = 'CAR0005'
    DECLARE @Query nvarchar(4000) = N'
        SELECT a.RutCli, b.AnaNom, a.Rol, SUM(a.Cantidad) AS Total, a.UnidadMedida
        FROM 
    	   CabGuia a
    	   INNER JOIN FRU_FORESTAL.dbo.ANACTA b ON a.RutCli = b.AnaCod
        WHERE 
    	   FGuia BETWEEN @FechaInicio AND @FechaFin
    	   AND a.CodCarga = @CodCarga AND a.RutCli IN(' + @Lista + ')
        GROUP BY a.RutCli, b.AnaNom, a.Rol, a.UnidadMedida;';
    
    EXECUTE sp_executesql @Query, N'@FechaInicio date, @FechaFin date, @CodCarga nvarchar(100)',
    		  @FechaInicio, @FechaFin, @CodCarga;
    GO

    jueves, 23 de noviembre de 2017 17:18