Forums Últimos mensajes - Powered by IBM
 

Procedimientos almacenados

30/11/2005 - 09:34 por Fernando López | Informe spam
Hola a todos,
llevo ya un tiempo pasando mi base de datos de Access a SQL. En estos
momentos ya tengo todas las tablas en SQL y el resto en una base de datos de
Access con las tablas vinculadas.
Ahora me gustaría utilizar los procedimientos almacenados para que la base
de datos sea aún más potente, pero me estoy peleando con los procedimientos
almacenados ...

Quiero convertir mis consultas en Procedimientos, pero todavía no estoy
familiarizado.
Un ejemplo sencillo:

Tengo un formulario que me pide 2 valores para poder seleccionar unos
candidatos : Nombre y un Area.
El nombre es texto libre y cuando escribo fer, quiero que luego me muestre
todos los nombres que tienen la cadena fer ( *fer*). El area es un combo que
muestra varias opciones, pero si no elijo ninguna quiero que luego me
muestre los candidatos de todas las areas.

Alter Procedure "ListaCandidatos2"
@Area int, @NombreCandi nvarchar AS

SELECT Candidatos.IDCandidato, Candidatos.Area, Candidatos.NombreCandidato,
Candidatos.NombrePuesto

FROM Candidatos

WHERE (Candidatos.Area like @Area)

return

Esto lo único que me hace es mostrar los candidatos cuando selecciono un
Area, pero nada más...



Gracias
 

Leer las respuestas

#1 Carlos Sacristán
30/11/2005 - 10:03 | Informe spam
No sé cómo es el diseño de tu tabla, pero por lo que estás hablando,
parece que no estás poniendo el filtro de forma correcta. Una opción a lo
que necesitas puede ser la siguiente:

***********************************************************
ALTER PROCEDURE ListaCandidatos2 @Area int, @NombreCandi nvarchar AS

IF @area > 0
SELECT Candidatos.IDCandidato, Candidatos.Area,
Candidatos.NombreCandidato, Candidatos.NombrePuesto
FROM Candidatos
WHERE Candidatos.Area = @Area AND nombreCandidato LIKE '%' + @nombreCandi
+ '%'
ELSE
SELECT Candidatos.IDCandidato, Candidatos.Area,
Candidatos.NombreCandidato, Candidatos.NombrePuesto
FROM Candidatos
WHERE nombreCandidato LIKE '%' + @nombreCandi + '%'

***********************************************************

Entiendo que cuando no quieras filtrar por un área concreta, le envías
un 0 como valor del parámetro. También tienes que tener en cuenta que aunque
tuvieras un índice en el campo 'nombreCandidato', por querer buscar el valor
del parámetro en cualquier lugar de la cadena, dicho índice no es útil y el
motor tiene que hacerse un barrido de toda la tabla para encontrar los
registros coincidentes...

Te recomiendo la lectura del artículo
http://www.sommarskog.se/dyn-search.html. Aunque está en inglés, creo que se
entiende bastante bien


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Fernando López" escribió en el mensaje
news:O4t$

Hola a todos,
llevo ya un tiempo pasando mi base de datos de Access a SQL. En estos
momentos ya tengo todas las tablas en SQL y el resto en una base de datos


de
Access con las tablas vinculadas.
Ahora me gustaría utilizar los procedimientos almacenados para que la base
de datos sea aún más potente, pero me estoy peleando con los


procedimientos
almacenados ...

Quiero convertir mis consultas en Procedimientos, pero todavía no estoy
familiarizado.
Un ejemplo sencillo:

Tengo un formulario que me pide 2 valores para poder seleccionar unos
candidatos : Nombre y un Area.
El nombre es texto libre y cuando escribo fer, quiero que luego me muestre
todos los nombres que tienen la cadena fer ( *fer*). El area es un combo


que
muestra varias opciones, pero si no elijo ninguna quiero que luego me
muestre los candidatos de todas las areas.

Alter Procedure "ListaCandidatos2"
@Area int, @NombreCandi nvarchar AS

SELECT Candidatos.IDCandidato, Candidatos.Area,


Candidatos.NombreCandidato,
Candidatos.NombrePuesto

FROM Candidatos

WHERE (Candidatos.Area like @Area)

return

Esto lo único que me hace es mostrar los candidatos cuando selecciono un
Area, pero nada más...



Gracias



Preguntas similares