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

Consulta con valor por defecto

Estas en el tema de Consulta con valor por defecto en el foro de SQL Server en Foros del Web. Saludos comunidad, tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DECLARE @puesto INT = NULL , @estado INT = NULL , @fecha_inicio DATE = ...
  #1 (permalink)  
Antiguo 20/12/2012, 13:40
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Consulta con valor por defecto

Saludos comunidad, tengo esta consulta:

Código SQL:
Ver original
  1. DECLARE
  2. @puesto INT=NULL
  3. ,@estado INT=NULL
  4. ,@fecha_inicio DATE=NULL
  5. ,@fecha_fin DATE=NULL
  6.  
  7. SELECT a.id_aspirante ID,
  8. a.nombre Nombre,
  9. c.descripcion Puesto_Solicitado,
  10. a.fecha_alta Fecha_Alta,
  11. a.telefono Telefono,
  12. CASE WHEN a.estado=0 THEN 'E'
  13. WHEN a.estado=1 THEN 'A'
  14. ELSE 'R' END AS Estado
  15. ,a.id_puesto_solicitado PS
  16. ,a.estado E
  17. FROM corp_aspirantes a
  18. INNER JOIN corp_categoria c ON c.id_categoria=a.id_puesto_solicitado
  19. WHERE fecha_alta BETWEEN (@fecha_inicio) AND (@fecha_fin)
  20. AND
  21. ((@puesto IS NULL) OR (a.id_puesto_solicitado=@puesto))
  22. AND
  23. ((@estado IS NULL) OR (a.estado=@estado))

Todo Ok, pero el detalle aquí es que quiero que los parámetros @fecha_inicio y fin tengan un valor por defecto, o mas bien que cuando ejecute la consulta por defecto me traiga todos los registros y cuando los parámetros reciban un valor entonces si filtre la búsqueda entre 2 fechas, tengo un único campo en la tabla de donde extraigo los datos que es tipo date y los valores de guardan de esta manera "yyyy/mm/dd"

Los datos van a parar a un Grid
  #2 (permalink)  
Antiguo 20/12/2012, 14:14
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta con valor por defecto

par asignarle un valor por defecto a las fechas en la consulta puedes usar un

set @fecha_inicio = '2012/12/12' (lo mismo para fecha_fin)

y con un if puedes verificar si los parametros tienen o no un valor para ejecutar la consulta que quieres.
  #3 (permalink)  
Antiguo 20/12/2012, 15:41
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Consulta con valor por defecto

Cambia la clausula Where a la siguiente:
Código SQL:
Ver original
  1. WHERE fecha_alta BETWEEN IsNull(@fecha_inicio,fecha_alta) AND IsNull(@fecha_fin,fecha_alta)
  2.           AND a.id_puesto_solicitado=IsNull(@puesto,a.id_puesto_solicitado)
  3.           AND a.estado=IsNull(@estado,a.estado)
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 20/12/2012, 17:03
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Consulta con valor por defecto

Funciona perfecto [B]GeriReshef[/B, pero por que es esto:
Código SQL:
Ver original
  1. IsNull(@fecha_inicio,fecha_alta)
no entiendo la coma despues de el parametro....gracias de antemano por la respuesta..
  #5 (permalink)  
Antiguo 20/12/2012, 17:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con valor por defecto

indica que si tu variable @fecha_inicio es nula entonces usara el valor de fecha_alta de tu tabla :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 20/12/2012, 17:21
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Consulta con valor por defecto

Correcto, eso no lo sabia, muchas gracias!

Etiquetas: defecto, registro, select, tabla, campos
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 07:19.