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:
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







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
Respuesta Responder a este mensaje
#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:%
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:
> 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
>
>



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


Respuesta Responder a este mensaje
#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:%
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:%
> 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:
> > 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
> >
> >
>
>
>
> 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
>
>







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
Respuesta Responder a este mensaje
#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:

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:%
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:
> 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
>
>



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





Respuesta Responder a este mensaje
#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



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


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida