Parametros a un store procedure

29/07/2004 - 19:10 por x-man | Informe spam
Hola estimados, tengo el siguiente sp a cual necesito pasarle varios
parametros en este caso Estados, actualmente solo le paso uno con la
variable @IdEstado que esta en el Having, el problema es que depende de
donde lo llame al sp (lo llamo desde vb6) varian los estados que me hace
falta mostrar, supongamos que lo Estados van del 1 al 8, deberia pararle
segun el caso por ej: 1,4,5 o 1,2,8 o 2 o 5,7
Esto se puede hacer con el sp q esta a continuacion o hay q usar sql
dinámico que por cierto nunca lo he usado
MUCHAS GRACIAS.

CREATE PROCEDURE pa_busca_alu_por_curso_estado (@Curso as char(3), @IdEstado
as smallint)AS
set nocount on
SELECT
A.Apellidos, A.Nombres, A.Legajo, A.IDAlumno, A.NroDocumento,
A.Curso,A.Domicilio,
A.Piso, A.Dpto, A.FechaNacimiento, A.Telefono, A.E_mail, B.[Fecha] AS
FechaUltEstado,
E.Descripcion AS Estado, T.Descripcion AS TipoDoc, L.Descripcion AS
Localidad, P.Descripcion AS Ciclo
FROM Alumnos A
INNER JOIN TipoDocumento T ON A.IDTipoDocumento = T.IDTipoDocumento
INNER JOIN Localidades L ON A.IDLocalidad = L.IDLocalidad
INNER JOIN AlumnosEstados B ON A.IdAlumno = B.IdAlumno
INNER JOIN Estados E ON B.IdEstado = E.IdEstado
INNER JOIN Curso C ON A.Curso = C.Curso
INNER JOIN CicloEnseñanza P ON P.IDCicloEnseñanza = C.IDCicloEnseñanza
WHERE B.[Fecha] = (SELECT MAX([Fecha]) FROM
AlumnosEstados D where B.IdAlumno = D.IdAlumno and A.Curso LIKE @Curso)
GROUP BY A.Apellidos, A.Nombres, A.Legajo, A.IDAlumno, A.NroDocumento,
A.Curso,
A.Domicilio, A.Piso, A.Dpto, A.FechaNacimiento, A.Telefono, A.E_mail,
B.[Fecha], E.Descripcion, T.Descripcion, L.Descripcion, P.Descripcion,
E.IdEstado
HAVING E.IDestado = @IdEstado
ORDER BY ApellidoNombre

Preguntas similare

Leer las respuestas

#1 Maxi
29/07/2004 - 22:16 | Informe spam
Hola, no entiendo cual es el problema :(, para mi esta bien ese SP, cual es
la pregunta exactamente?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"x-man" escribió en el mensaje
news:
Mostrar la cita
@IdEstado
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.722 / Virus Database: 478 - Release Date: 18/07/2004
#2 x-man
29/07/2004 - 22:42 | Informe spam
Maxi, la pregunta es como hacer para pasarle a ese sp varios Estados, osea
lo q nesecito es que se puedan pasar 1 o n estados
algo asi CREATE PROCEDURE pa_busca_alu_por_curso_estado (@Curso as char(3),
@IdEstado1, @IdEstado2, @IdEstado3, @IdEstado4, @IdEstado5)
pero depende de donde lo llame le pasaria 1,4,5 o 1,4 o 3
un ejemplo "pienso yo" de como seria la entrada: @IdEstado1 = 1, @IdEstado2
= "" , @IdEstado3 = "", @IdEstado4= 4, etc
y en HAVING E.IDestado = si_tiene datos(@IdEstado1) and si_tiene
datos(@IdEstado2) and si_tiene datos(@IdEstado3) etc.

espero q se entienda, no soy muy bueno explicando
Mil gracias


"Maxi" escribió en el mensaje
news:%
Mostrar la cita
es
Mostrar la cita
#3 Maxi
29/07/2004 - 22:52 | Informe spam
Hola, entiendo, una matriz directamente no le vas a poder pasar :(, una
opcion seria que cargues las variables en una tabla temporal y que luego la
uses dentro del Query.

Un abrazo


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"x-man" escribió en el mensaje
news:%
Mostrar la cita
char(3),
Mostrar la cita
@IdEstado2
Mostrar la cita
de
Mostrar la cita
hace
Mostrar la cita
pararle
Mostrar la cita
@Curso)
Mostrar la cita
A.NroDocumento,
Mostrar la cita
P.Descripcion,
Mostrar la cita
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.722 / Virus Database: 478 - Release Date: 18/07/2004
#4 ulises
30/07/2004 - 04:51 | Informe spam
Adicionalmente a lo que menciona Maxi,

1) Si la lista es fija, por ejemplo: si son 4, se pueden declarar los
4 parámetros con valores default y luego ser usados en la clausúla
HAVING usando IN

CREATE PROCEDURE pa_busca_alu_por_curso_estado
( @curso as char(3),
@ind1 char(1) = ' ',
@ind2 char(2) = ' ',
@ind3 char(1) = ' ',
@ind4 char(2) = ' ' )
AS
...
HAVING E.IDestado IN ( @ind1, @ind2, @ind3, @ind4 )

2) Si la lista on es fija podrìas usar algunos de los métodos de
simular matrices que tiene Erland Sommarskog en su pagína

Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html

Saludos,
Ulises


On Thu, 29 Jul 2004 17:42:51 -0300, "x-man"
wrote:

Mostrar la cita
#5 Fabian Ramirez
30/07/2004 - 22:04 | Informe spam
Creo que esto es lo que necesitas

Llamado de ejemplo
exec pa_busca_alu_por_curso_estado '123', '1,2,3,4,5,6'


CREATE PROCEDURE pa_busca_alu_por_curso_estado (@Curso as
char(3), @IdEstado
as varchar(50) )AS
BEGIN
set nocount on

declare @SentenciaSQL nvarchar(2048)

select @SentenciaSQL =
'SELECT
A.Apellidos, A.Nombres, A.Legajo, A.IDAlumno,
A.NroDocumento,
A.Curso,A.Domicilio,
A.Piso, A.Dpto, A.FechaNacimiento, A.Telefono, A.E_mail,
B.[Fecha] AS
FechaUltEstado,
E.Descripcion AS Estado, T.Descripcion AS TipoDoc,
L.Descripcion AS
Localidad, P.Descripcion AS Ciclo
FROM Alumnos A
INNER JOIN TipoDocumento T ON A.IDTipoDocumento =
T.IDTipoDocumento
INNER JOIN Localidades L ON A.IDLocalidad = L.IDLocalidad
INNER JOIN AlumnosEstados B ON A.IdAlumno = B.IdAlumno
INNER JOIN Estados E ON B.IdEstado = E.IdEstado
INNER JOIN Curso C ON A.Curso = C.Curso
INNER JOIN CicloEnseñanza P ON P.IDCicloEnseñanza =
C.IDCicloEnseñanza
WHERE B.[Fecha] = (SELECT MAX([Fecha]) FROM
AlumnosEstados D where B.IdAlumno = D.IdAlumno and
A.Curso LIKE '+ @Curso+')
GROUP BY A.Apellidos, A.Nombres, A.Legajo, A.IDAlumno,
A.NroDocumento,
A.Curso,
A.Domicilio, A.Piso, A.Dpto, A.FechaNacimiento,
A.Telefono, A.E_mail,
B.[Fecha], E.Descripcion, T.Descripcion, L.Descripcion,
P.Descripcion,
E.IdEstado
HAVING E.IDestado in ('+@IdEstado + ')
ORDER BY ApellidoNombre'


execute sp_executesql @SentenciaSQL

END



Mostrar la cita
pasarle varios
Mostrar la cita
paso uno con la
Mostrar la cita
que depende de
Mostrar la cita
estados que me hace
Mostrar la cita
deberia pararle
Mostrar la cita
hay q usar sql
Mostrar la cita
as char(3), @IdEstado
Mostrar la cita
A.NroDocumento,
Mostrar la cita
A.E_mail, B.[Fecha] AS
Mostrar la cita
L.Descripcion AS
Mostrar la cita
T.IDTipoDocumento
Mostrar la cita
L.IDLocalidad
Mostrar la cita
C.IDCicloEnseñanza
Mostrar la cita
A.Curso LIKE @Curso)
Mostrar la cita
A.NroDocumento,
Mostrar la cita
A.Telefono, A.E_mail,
Mostrar la cita
P.Descripcion,
Mostrar la cita
Ads by Google
Search Busqueda sugerida