Principales respuestas
Pasar datos de una lista

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.UnidadMedidaGracias
- Cambiado Enrique M. Montejo sábado, 25 de noviembre de 2017 7:30 Pregunta relacionada con T-SQL.
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
- Propuesto como respuesta Pablo RubioModerator viernes, 24 de noviembre de 2017 16:26
- Marcado como respuesta Pablo RubioModerator lunes, 27 de noviembre de 2017 19:49
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
-
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;- Propuesto como respuesta Pablo RubioModerator jueves, 23 de noviembre de 2017 15:57
-
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
- Propuesto como respuesta Pablo RubioModerator viernes, 24 de noviembre de 2017 16:26
- Marcado como respuesta Pablo RubioModerator lunes, 27 de noviembre de 2017 19:49