Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con consulta en sql

Estas en el tema de Problema con consulta en sql en el foro de .NET en Foros del Web. hola amigos, les comento cual es mi problema a ver si alguno me puede ayudar.. resulta que yo necesito hacer la busqueda de personal tanto ...
  #1 (permalink)  
Antiguo 01/03/2011, 22:20
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Problema con consulta en sql

hola amigos, les comento cual es mi problema a ver si alguno me puede ayudar.. resulta que yo necesito hacer la busqueda de personal tanto por nombre como por dni y como tengo que traer los mismos campos quiero usar el mismo procedimiento pero el problema es que nombre es de tipo varchar(50) y dni int ( y me dijeron que dni si o si tiene que ser tipo int).
bueno cuando busco por medio del dni me trae todo pero por medio dni me tira el erro ya que dice que tal nombre ej juan sanchez no es de tipo int.. la pregunta es la siguiente.. cual es el error en el procedimiento o es que directamente es imposible hacerlo en el mismo procedimiento???



Cita:
ALTER procedure [dbo].[obtenerhorariopersonalcargo]
@dni varchar(50)
as
select (p.nombre +' '+ p.apellido)as nombres, c.nombre, p.foto, d.descripcion, hpc.h_entrada, hpc.m_entrada, hpc.h_salida, hpc.m_salida,c.horas,p.nro from personal p
inner join personalcargos pc on p.id_personal = pc.id_personal
inner join cargos c on pc.id_cargo = c.id_cargo
inner join horariopersonalcargos hpc on c.id_cargo = hpc.id_cargo
inner join dias d on hpc.dia = d.dia
where (p.apellido +' '+ p.nombre)=@dni or (p.nombre +' '+ p.apellido)=@dni or @dni= p.nro


desde ya muchismas gracias
  #2 (permalink)  
Antiguo 01/03/2011, 22:36
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema con consulta en sql

quieres buscar al personal por el nombre o por su DNI.

prodias cambiar el tipo de dato de ese parametro a nvarchar(50)
y prueba esto.
where @dni = (p.apellido +' '+ p.nombre) or @dni= p.nro

si no has dos procedimientos almacenados diferentes en todo caso.
  #3 (permalink)  
Antiguo 01/03/2011, 22:39
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
De acuerdo Respuesta: Problema con consulta en sql

Cita:
Iniciado por Erick21 Ver Mensaje
quieres buscar ala personal por el nombre o por su DNI.

prodias cambiar el tipo de dato de ese parametro a nvarchar(50)
y prueba esto.
where @dni = (p.apellido +' '+ p.nombre) or @dni= p.nro

si no has dos procedimientos almacenados diferentes en todo caso.


el procedimiento lo queria evitar hermano ya que el programa es bastante grande lamentablemente, y el campo dni no me lo dejan cambiar a nvarchar(50) ya que me lo toman como que esta mal.. mil gracias por la ayuda
  #4 (permalink)  
Antiguo 02/03/2011, 15:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con consulta en sql

ALTER procedure [dbo].[obtenerhorariopersonalcargo]
@dni varchar(50)
as
select (p.nombre +' '+ p.apellido)as nombres, c.nombre, p.foto, d.descripcion, hpc.h_entrada, hpc.m_entrada, hpc.h_salida, hpc.m_salida,c.horas,p.nro from personal p
inner join personalcargos pc on p.id_personal = pc.id_personal
inner join cargos c on pc.id_cargo = c.id_cargo
inner join horariopersonalcargos hpc on c.id_cargo = hpc.id_cargo
inner join dias d on hpc.dia = d.dia
where
(case when isnumeric(@dni)=1 then rtrim(p.nro) else p.nombre +' '+ p.apellido end)
like '%'+@dni+'%'

y wala!
  #5 (permalink)  
Antiguo 02/03/2011, 16:34
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 3 meses
Puntos: 4
Respuesta: Problema con consulta en sql

Puedes mandar 2 parametros a tu stored procedure (inicializados a un valor default). Si tienes problemas para entender la clausula where, avísame.

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[obtenerhorariopersonalcargo]
  2. @nombre VARCHAR(50) = NULL,
  3. @dni INT = 0
  4. AS
  5.  
  6.  
  7. SELECT (p.nombre +' '+ p.apellido)AS nombres, c.nombre, p.foto, d.descripcion, hpc.h_entrada, hpc.m_entrada, hpc.h_salida, hpc.m_salida,c.horas,p.nro FROM personal p
  8. INNER JOIN personalcargos pc ON p.id_personal = pc.id_personal
  9. INNER JOIN cargos c ON pc.id_cargo = c.id_cargo
  10. INNER JOIN horariopersonalcargos hpc ON c.id_cargo = hpc.id_cargo
  11. INNER JOIN dias d ON hpc.dia = d.dia
  12. WHERE (@nombre IS NOT NULL AND (p.apellido +' '+ p.nombre)=@nombre)
  13.  OR
  14. (@dni > 0 AND  @dni= p.nro)

Cuando mandes llamar el stored procedure, puedes mandarle solo el parametro int @dni.. el stored procedure esta preparado para NO recibir el segundo parametro.. y el where esta preparado para hacer el filtro SOLO por el parametro que recibio.

Código SQL:
Ver original
  1. EXEC obtenerhorariopersonalcargo @dni = 4

Código SQL:
Ver original
  1. EXEC obtenerhorariopersonalcargo @nombre = 'juan'

con esta logica puede ser que lo mandes SIN parametros. En ese caso talvez fuera necesario que hicieras una validación. Si los dos parametros vienen nullos.. salir del SP.
  #6 (permalink)  
Antiguo 02/03/2011, 16:41
Avatar de luisito1  
Fecha de Ingreso: junio-2009
Ubicación: Córdoba
Mensajes: 226
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Problema con consulta en sql

muchisimas gracias amigos y pensando gracias a mi otro amigo aquaventus sacamos algo bien facil que lo soluciono... se los dejo asi les sirve a ustedes tambien


Cita:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER procedure [dbo].[obtenerhorariopersonalcargo]
@dni varchar(50) -- int
as
select (p.nombre +' '+ p.apellido)as nombres, c.nombre, p.foto, d.descripcion, hpc.h_entrada, hpc.m_entrada, hpc.h_salida, hpc.m_salida,c.horas,p.nro from personal p
inner join personalcargos pc on p.id_personal = pc.id_personal
inner join horariopersonalcargos hpc on p.id_personal = hpc.id_personal
inner join cargos c on c.id_cargo = hpc.id_cargo
inner join dias d on hpc.dia = d.dia
where @dni=(p.apellido +' '+ p.nombre) or @dni= (p.nombre +' '+ p.apellido) or @dni =cast(p.nro as nvarchar(50))



Espero que a quien le haga falta algo asi le resulte util cualquiera de las tres formas :) ... y como siempre gracias por su tiempo y sobre todo por las ganas de ayudar

Etiquetas: sql
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 15:05.