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

Agregar AND´S Dinamicamente a una consulta

Estas en el tema de Agregar AND´S Dinamicamente a una consulta en el foro de SQL Server en Foros del Web. Buenas a todo@s tengo una pequeña duda, estoy haciendo un reporte en un procedimiento almacenado, el cual desde la pagina lleva unos filtrol, tales como ...
  #1 (permalink)  
Antiguo 13/01/2014, 07:35
Avatar de EderBarriosCamargo  
Fecha de Ingreso: marzo-2013
Mensajes: 55
Antigüedad: 11 años, 8 meses
Puntos: 0
Agregar AND´S Dinamicamente a una consulta

Buenas a todo@s tengo una pequeña duda, estoy haciendo un reporte en un procedimiento almacenado, el cual desde la pagina lleva unos filtrol, tales como FechaVisita , Vendedor, Nombre del Cliente ETC..
Este es el SP...
Código SQL:
Ver original
  1. DECLARE @FechaInicial AS DATE
  2. DECLARE @FechaFinal AS DATE
  3. DECLARE @IdVendedor AS VARCHAR(3)
  4. DECLARE @NombreCLiente AS VARCHAR(20)
  5.  
  6. SET @FechaInicial=CONVERT(DATE ,GETDATE())
  7. SET  @FechaFinal=DATEADD(DAY,1,@FechaInicial)
  8. SELECT
  9.      V.IdVisita,V.NombreCliente,(U.Nombres+' '+U.Papellido) AS Nombre ,
  10.      I.Nombre AS Incidencia,
  11.      CAST (V.FechaVisita AS VARCHAR) AS FechaVisita,
  12.      ISNULL(CAST((SELECT 'SI' FROM Cobros AS CO WHERE CO.IdVisita=V.IdVisita AND (SELECT COUNT(*) FROM DetallesCobros WHERE IdCobro=CO.IdCobro)>0) AS VARCHAR),'NO') AS Cobro,
  13.      ISNULL(CAST((SELECT top 1 'SI' FROM Pedidos AS P WHERE P.IdVisita=V.IdVisita AND Cotizacion='C' AND V.IdUsuario=P.Idvendedor) AS VARCHAR),'NO') AS Cotizo,
  14.      ISNULL(CAST((SELECT top 1 'SI' FROM Pedidos AS P WHERE P.IdVisita=V.IdVisita AND Cotizacion='P' AND V.IdUsuario=P.Idvendedor) AS VARCHAR),'NO') AS Pidio,
  15.      ISNULL(CAST((SELECT top 1 'SI' FROM Inventario_Cliente AS IC  WHERE IC.IdVisita =V.IdVisita ) AS VARCHAR),'NO') AS Inventario,
  16.      ISNULL((SELECT top 1 ((IC.NumeroDeitenes-IC.NumeroDeItenesEnblanco)*100/IC.NumeroDeitenes) AS Porcentaje
  17.        FROM Inventario_Cliente AS IC WHERE NumeroDeitenes<>0 AND IC.IdVisita=V.IdVisita),0) AS Porcentaje,
  18.        
  19.        V.IdUsuario
  20.          --ISNULL((),0)
  21. FROM Visitas_e AS V , Users AS U , Incidencias_E AS I
  22. WHERE U.CodigoVendedor=V.IdUsuario AND I.Id=V.Idincidencia
  23. -- Por jemplo si me envia el parametro Vendedor
  24.    IF(vendedor!=0)
  25.     BEGIN
  26.        AND V.Idvendedor=@IdVendedor
  27.     END
  28. --SI ME ENVIA LAS FECHAS
  29.        
  30.     IF(@FechaInical<>NULL AND @FEchaFinal<>NULL)BEGIN
  31.       AND V.FechaVisita BETWEEN @FechaInicial AND @FechaFinal
  32.     END

Gracias De antemanos

Última edición por EderBarriosCamargo; 13/01/2014 a las 07:36 Razón: Dar Gracias
  #2 (permalink)  
Antiguo 13/01/2014, 10:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agregar AND´S Dinamicamente a una consulta

investiga sobre queries dinamicos :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/01/2014, 12:45
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Agregar AND´S Dinamicamente a una consulta

prueba esta opcion en la clausula Where:

Código SQL:
Ver original
  1. WHERE U.CodigoVendedor=V.IdUsuario AND I.Id=V.Idincidencia
  2.  
  3.    AND (NOT (vendedor!=0) OR V.Idvendedor=@IdVendedor)
  4.  
  5.    AND (NOT (@FechaInical<>NULL AND @FEchaFinal<>NULL) OR V.FechaVisita BETWEEN @FechaInicial AND @FechaFinal)
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 13/01/2014, 12:54
Avatar de EderBarriosCamargo  
Fecha de Ingreso: marzo-2013
Mensajes: 55
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Agregar AND´S Dinamicamente a una consulta

Gracias, los probare y les comentare..

Etiquetas: almacenado, dinamicamente, fecha, procedimiento, select
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 00:18.