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

Busqueda en SQL Server

Estas en el tema de Busqueda en SQL Server en el foro de Bases de Datos General en Foros del Web. Hola, me estoy iniciando en el mundo del SQL y estoy practicando unos ejercicios. Mi duda es la siguiente Tengo que hacer un Stored Procedure ...
  #1 (permalink)  
Antiguo 08/11/2011, 19:37
 
Fecha de Ingreso: abril-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Busqueda Busqueda en SQL Server

Hola, me estoy iniciando en el mundo del SQL y estoy practicando unos ejercicios.

Mi duda es la siguiente

Tengo que hacer un Stored Procedure (SP)que haga un Select de ciertos datos que estan contenidos en tres tablas de una base de datos, en este caso: Persoana, Direccion y Pais.

La problemática es esta: El SP recibe tres variables: Nombre, Apellido Paterno y Apellido Materno
Y debe hacer la siguiente consulta:

SELECT
A.idPersona
,A.Nombre
,A.aPaterno
,A.aMaterno
,C.Profesion
,A.RFC
,A.CorreoElectronico
,B.Direccion
,B.Colonia
,B.CP
FROM tblPersona A
INNER JOIN tblDireccion B ON A.idPersona=B.idPersona
Inner Join tblProfesion C ON A.idProfesion=C.idProfesion

La consulta trae básicamente todo lo contenido en la base de datos, que cumplan con las condiciones anteriores, pero lo que yo quiero es que aparte de eso, traiga solo los registros que cumplan con las condiciones de Nombre y apellidos, algo como lo que sigue:

CREATE PROCEDURE [dbo].[spu_SearchPersona]

@Nombre AS VARCHAR(100)
,@aPaterno AS VARCHAR (50)
,@aMaterno AS VARCHAR(50)


AS
BEGIN
SET NOCOUNT ON;
SELECT
A.idPersona
,A.Nombre
,A.aPaterno
,A.aMaterno
,C.Profesion
,A.RFC
,A.CorreoElectronico
,B.Direccion
,B.Colonia
,B.CP
FROM tblPersona A
INNER JOIN tblDireccion B ON A.idPersona=B.idPersona
Inner Join tblProfesion C ON A.idProfesion=C.idProfesion
WHERE A.Nombre like '%'+@Nombre+'%' OR
A.aPaterno like '%'+@aPaterno+'%' OR
A.aMaterno like '%'+@aMaterno+'%'

Esa búsqueda me trae todos los registros que tengan en su nombre o en apellidos lo que resivan las variables.

Pero ese no es el problema, el problema es que aunque el SP resiva 3 variables, desde la aplicación se le pueden mandar 1 o 2 o las 3 variables y debe hacer la búsqueda correspondiente con el numero de variables.

Por ejemplo:

Si yo mandará Nombre=a
aPaterno=Martinez
aMaterno=o
La búsqueda me deberá traer todos los registros que en el nombre lleven una "a", en el apellido paterno tengan "Martinez" y en el apellido materno tengan una "o".

Por otro lado si yo mandará:
aPaterno=MO
aMaterno=s
La búsqueda me deberá traer todos los registros que tengan en el apellido paterno la palabra Mo y en el apellido materno la letra "S" con cualquier nombre.



Gracias.
  #2 (permalink)  
Antiguo 09/11/2011, 08:33
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: Busqueda en SQL Server

si lo dejas asi cuando ejecutas tu procedure sin algun parametro que hace???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/11/2011, 09:03
 
Fecha de Ingreso: abril-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Respuesta: Busqueda en SQL Server

Cita:
Iniciado por Libras Ver Mensaje
si lo dejas asi cuando ejecutas tu procedure sin algun parametro que hace???
El SP sino recibe ningún parámetro ara la búsqueda como sino no hubiera ningún Where
Sin embargo, consultándolo con la almohada, parece que encontré la respuesta
Parece que el error es en el OR, si se sustituye por un AND arroja los resultados esperados.
Por ejemplo, si yo hago las siguientes modificaciones para probarlo como una consulta normal:
DECLARE
@Nombre AS VARCHAR(100)
,@aPaterno AS VARCHAR (50)
,@aMaterno AS VARCHAR(50)

SET @Nombre='l'
SET @aPaterno=''
SET @aMaterno='o'

SELECT
A.idPersona
,A.Nombre
,A.aPaterno
,A.aMaterno
,C.Profesion
,A.RFC
,A.CorreoElectronico
,B.Direccion
,B.Colonia
,B.CP
FROM tblPersona A
INNER JOIN tblDireccion B ON A.idPersona=B.idPersona
Inner Join tblProfesion C ON A.idProfesion=C.idProfesion
WHERE A.Nombre LIKE '%'+@Nombre+'%'and
A.aPaterno LIKE '%'+@aPaterno+'%'and
A.aMaterno LIKE '%'+@aMaterno+'%'

La base de datos solo me arroja los registros que tengan en nombre una l y apellido materno una o, sin importar si viene vacio el apellido paterno.

Gracias.

Etiquetas: registros, server, sql, tabla, busquedas
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 23:56.