Array
(
)

Parametro em Store Procedure TODOS caso não tenha parametro

Paulo Freire
|
MVP
    13 jan 2011

Olá a todos e agradeço qualquer ajuda
Preciso fazer um store procedure onde caso o usuario não escolha um parametro o select traga todos os registro, sei que o SQL 2005 tem isso
minha tabela TBL_ALUNOS
ID, NOME, DATA_NASC, ENDERECO, ID_CURSO
Minha procedure:
CREATE PROCEDURE [escola].procAlunosPorCurso (   @CURSO SMALLINT)AS
SELECT TBL_ALUNOS.ID,                 TBL_ALUNOS.NOME,                 TBL_ALUNOS.DATA_NASC,                 TBL_ALUNOS.ENDERECO,                 TBL_ALUNOS.ID_CURSO, TBL_CURSOS.NOME_CURSO
FROM TBL_ALUNOS       INNER JOIN TBL_CURSOS ON (TBL_CURSOS.ID = TBL_ALUNOS.ID_CURSO)
WHERE         TBL_ALUNOS.ID_CURSO=@CURSO

Teria como colocar um parametro TODOS no dropDonwList ai trazer todos ????

Grato

Luciana
   - 14 jan 2011

Olá,    Já tentou uitlizar a função COALESCE, no exemplo da procedure, caso o usuário não informar nenhum curso todos os alunos seriam mostrados:   CREATE PROCEDURE [escola].procAlunosPorCurso (    @CURSO SMALLINT ) AS
SELECT TBL_ALUNOS.ID,                  TBL_ALUNOS.NOME,                  TBL_ALUNOS.DATA_NASC,                  TBL_ALUNOS.ENDERECO,                  TBL_ALUNOS.ID_CURSO, TBL_CURSOS.NOME_CURSO
FROM TBL_ALUNOS         INNER JOIN TBL_CURSOS ON (TBL_CURSOS.ID = TBL_ALUNOS.ID_CURSO)
WHERE          TBL_ALUNOS.ID_CURSO= COALESCE (@CURSO, TBL_ALUNOS.ID_CURSO)       Se esta for a sua dúvida o COALESCE, poderá te ajudar.   Até mais.

0
|
0

Paulo Freire
|
MVP
    14 jan 2011

Oi Luciana, obrigado por em responder
Seria mais ou menos isso, tenho um WebForm, onde tem um dropdownList chamado dpCursos, onde carrego dessa formas, no Page_Load:
        private void CarregaIgrejas()        {            string stringConexao = ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString;            using (SqlConnection con = new SqlConnection(stringConexao))            {                using (SqlCommand cmd = new SqlCommand("SELECT ID, CURSO FROM CURSOS ORDER BY CURSO", con))                {                    cmd.Connection.Open();
                    SqlDataReader drValues;                    drValues = cmd.ExecuteReader();
                    dpCursos.DataSource = drValues;                    dpCursos.DataValueField = "ID";                    dpCursos.DataTextField = "CURSO";                    dpCursos.DataBind();
                    cmd.Connection.Close();                    cmd.Connection.Dispose();                }            }        }

Gostaria de ao Carregar esse DropDownList, carregasse assim:
<<TODOS>>MATEMATICAPORTUGUESHISTORIAGEOGRAFIA
Caso seja escolhido o paramentro todos eu poderia usar o COALESCE.
Muito grato

0
|
0

Emerson
   - 14 jan 2011

o funcionamento vai depender de como você envia o parâmetro, visto que ele é inteiro.

suponho que você envie o próprio index do combobox. nesse caso sua procedure deveria ser assim:

CREATE PROCEDURE [escola].procAlunosPorCurso (
   @CURSO SMALLINT
)
AS
    SELECT TBL_ALUNOS.ID,
        TBL_ALUNOS.NOME,
        TBL_ALUNOS.DATA_NASC,
        TBL_ALUNOS.ENDERECO,
        TBL_ALUNOS.ID_CURSO,
        TBL_CURSOS.NOME_CURSO
    FROM TBL_ALUNOS
    INNER JOIN TBL_CURSOS ON (TBL_CURSOS.ID = TBL_ALUNOS.ID_CURSO)
    WHERE (@CURSO = 0 OR TBL_ALUNOS.ID_CURSO = @CURSO)

assim, ao selecionar TODOS você envia 0 (zero) para a procedure e tudo será listado. se o valor enviado for diferente de 0 (zero), serão listados somente aqueles registros cujo ID_CURSO seja igual ao valor enviado.

eu sugeri o valor 0 (zero) no cado de TODOS, mas você pode enviar -1 ou qualquer outro valor, desde que esse valor não esteja sendo usado num ID_CURSO.

0
|
0

Paulo Freire
|
MVP
    17 jan 2011

Obrigado Luciana e emerson, era isso mesmo que precisava. Obrigado

0
|
0