SQL - Ayuda con StoreProcedure(SELECT)

Iniciado por AlonsoCN, 4 Noviembre 2009, 02:36 AM

0 Miembros y 1 Visitante están viendo este tema.

AlonsoCN

Buenas a todos  :)

Mi duda es simple  ;D eso creooo! :laugh:
Bueno tengo un SP que es para buscar a un alumno por sus apellidos
pero el problema es que cuando busco al alumno.. solo busca con 1 solo apellido
(Apellido Paterno o Apellido Materno) pero si quiero buscar con los 2 apellidos... nada  :(

El Codigo que tengo hasta ahora es...
-- BUSQUEDA DE ESTUDIANTE POR APELLIDOS
CREATE PROCEDURE USP_S_BUSCARESTUDIANTEAPELLIDO
@EST_Apellido varchar(30)
AS
BEGIN TRANSACTION
SELECT
EST_Codigo AS Codigo ,
EST_Nombres AS Nombre ,
EST_ApellidoPaterno AS ApellidoPaterno ,
EST_ApellidoMaterno AS ApellidoMaterno ,
EST_CorreoElectronico AS CorreoElectronico
FROM Estudiante
WHERE EST_ApellidoPaterno = @EST_Apellido OR EST_ApellidoMaterno = @EST_Apellido
IF (@@error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO


Creo que el problema es en el WHERE... no lo sé

Gracias de antemano!
:P

+=============+
| All you need is Love!  |
+=============+

^Tifa^

Hola cielo  :D

Mira si te fijas bien en tu SP, solamente pasas 1 solo parametro:

Código (sql) [Seleccionar]

CREATE PROCEDURE USP_S_BUSCARESTUDIANTEAPELLIDO
@EST_Apellido                varchar(30)


Y le pasas ese unico parametro a las 2 condiciones del WHERE:

Código (sql) [Seleccionar]


WHERE EST_ApellidoPaterno = @EST_Apellido OR EST_ApellidoMaterno = @EST_Apellido



Por ende el WHERE esta buscando en base a 1 solo parametro que posee el mismo valor  :P  para buscar por los 2 apellidos debes declarar 2 parametros y no 1 solo, y pasarle cada parametro a cada campo, por ejemplo:

Código (sql) [Seleccionar]

CREATE PROCEDURE USP_S_BUSCARESTUDIANTEAPELLIDO
@EST_Apellido                varchar(30), @DOS_Apellido varchar(30)


Por lo que:

Código (sql) [Seleccionar]


WHERE EST_ApellidoPaterno = @EST_Apellido OR EST_ApellidoMaterno = @DOS_Apellido



Ahi deberia buscarte por uno u el otro  ;)

PD: No se nada sobre T-SQL por ende puede que haya hecho mal la sintaxis al ejemplo de tu SP pero estoy segura que entenderas la propuesta que te hago.

Un besote  :-*

AlonsoCN

Hellooooooooouuuu ^TiFa^ !  :D

TiFa la razón por la cual estoy trabajando con un solo parámetro es por que los Apellidos del estudiante se ingresan en un solo TextBox... no puedo usar 2 TextBox para buscar por apellido por que en ese mismo textBox donde ingreso los Apellidos, también ingreso codigo del alumno para buscarlo (si quiero buscar por Apellido o Código eso depende de un CheckBox) 

Espero que me hayas entendido ^TiFa^  :)

Saludos!   :D
+=============+
| All you need is Love!  |
+=============+

^Tifa^

Si ese punto lo entiendo, pero en tu tabla tu tienes 2 campos de Apellidos distintos, uno del padre, otro de la madre.

Citar
EST_ApellidoPaterno        AS ApellidoPaterno               ,
EST_ApellidoMaterno        AS ApellidoMaterno   


Lo cual esta bien, debe ser asi. Ahora como solo puedes utilizar en el formulario 1 textbox, tienes que buscar la manera en tu codigo (de cual sea el lenguaje que uses) de hacer un SPLIT de los 2 apellidos ingresados en ese textbox y guardarlos en un Array, dicho Array sera de 2 apellidos los cuales igual puedes pasarselos a tu SP declarandoles 2 parametros 1 por cada Apellido. Porque no puedes buscar por los 2 apellidos sino utilizas las condiciones de dicha busquedad, tienes que solicitar los 2 apellidos o realizar la busquedad en base a 1 solo apellido.

AlonsoCN

Eso de usar una array puede ser una solución... pero, encontré esta mejor! ;D

Ya arregle ese problema asi:


CREATE PROCEDURE USP_S_BUSCARESTUDIANTEAPELLIDO
@EST_Apellido varchar(30)
AS
BEGIN TRANSACTION
SELECT
EST_Codigo AS Codigo ,
EST_Nombres AS Nombre ,
EST_ApellidoPaterno AS ApellidoPaterno ,
EST_ApellidoMaterno AS ApellidoMaterno ,
EST_CorreoElectronico AS CorreoElectronico
FROM Estudiante
WHERE EST_ApellidoPaterno + ' ' + EST_ApellidoMaterno LIKE '%' + @EST_Apellido + '%'
IF (@@error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO


Gracias por tu ayuda ^TiFa^  :), siempre tu presente!  ;D  ¡GRACIAS!

Saludos!  ;)
+=============+
| All you need is Love!  |
+=============+

^Tifa^

No veo en que la clausula LIKE busque por los 2 apellidos  :huh:   :huh:
Que pasa si el apellido paterno es Lopez y el Materno es Ruiz y tu estas buscando en base a 1 solo Apellido en este caso Lopez asi:

%Lopez%

Eso es traeme todos los apellidos que tengan en su centro la palabra 'Lopez'...

So no te entiendo :P

AlonsoCN

jajajaja  :P yo tampoco te entiendo a que te refieres  :xD

pero TiFa cuando estoy buscando un apellido... digamos 'Calle Núñez'

Si busco con 'Calle' = CORRECTO (encuentra)
Si busco con 'Núñez' = CORRECTO
Si busco con 'Calle Núñez' = CORRECTO
Si busco con 'Calle Nunes' = INCORRECTO (no encuentra)
Si busco con 'Núñez Calle' = INCORRECTO
Si busco con 'Nu Ca' = INCORRECTO

Como podrás ver solo encuentra al alumno con esas 3 maneras de ingresarlos...
Eso quiere decir que funciona verdad?  :rolleyes:
+=============+
| All you need is Love!  |
+=============+

^Tifa^

Ahh pos mira que bien, cuando te referias a 1 Textbox asumi que te referias a que solo se insertaba 1 solo apellido y no los dos juntos....

Aunque literalmente usando LIKE %Lopez Ruiz%  funcione, yo habia asumido que era1 solo apellido %Lopez%  pero si tu textbox accepta los 2 campos, yo me inclinaria mas por el array, los 2 parametros y el

WHERE Apellido_Paterno = parametro1 OR Apellido_materno = parametro2 
La razon? optimizacion  ;) (solo si los 2 campos anteriores son indices) ya que la clausula LIKE filtra en todos los registros existentes y inexistente (NULL) de la tabla y si yo tengo 5 millones de registros.... ya tomas la idea.

Pero si prefieres mantenerte con el LIKE ni modo :P

AlonsoCN

+=============+
| All you need is Love!  |
+=============+