none
Dúvida com procedure RRS feed

  • Pergunta

  • Olá pessoal,

    Estou usando uma função para listar determinados registros de uma tabela através de uma stored procedure.
    Criei a sp da seguinte maneira:

    CREATE PROCEDURE spListarStatusChamados
    AS
    SELECT * FROM TStatusChamados
    ORDER BY IdStatusChamado
    GO

    Está funcionado corretamente, trazendo todos os registros da tabela. A função pode receber parämetros opcionais, os quais estariam na cláusula WHERE. A dúvida é: como devo montar a sp para que ela funcione com ou sem a passagem de parâmetros?

    Obrigada.

     

    Public Function Listar(Optional ByVal hs As Hashtable = Nothing) As DataSet

    Dim obj As New ClassCamadaDados()

    Dim dt As DataTable

    dt = obj.obterDadosProcedure(getDataTable, getProcListar, hs)

    obj = Nothing

    Return (dt.DataSet)

    End Function

     

     

    Public Function obterDadosProcedure(ByVal dt As DataTable, ByVal NomeProcedure As String, Optional ByVal parametros As Hashtable = Nothing) As DataTable

     

    Dim banco As New ClassCamadaObjetosBanco()

    Try

    banco.CriarObjetosBanco()

    banco.command.CommandText = NomeProcedure

     

    dt.BeginLoadData()

    Dim DTM As New Common.DataTableMapping("Table", dt.TableName)

    banco.DataAdapter.TableMappings.Add(DTM)

     

    If Not IsNothing(parametros) Then

    banco.conexao.Open()

    banco.ObterParametros(banco.command)

    preencherParametros(banco.command, parametros)

    End If

     

    Dim ds As DataSet

    ds = dt.DataSet

    banco.DataAdapter.Fill(ds)

    Catch er As OleDb.OleDbException

    Throw New ApplicationException("Ocorreu um erro durante o processo de obtenção do dataset", er)

    End Try

    banco.FechaConexao()

    dt.EndLoadData()

    Return (dt)

    End Function

     

     

    Protected Overrides Function getProcListar() As String

    Return "spListarStatusChamados"

    End Function

     

     

    Protected Overrides Function getDataTable() As DataTable

    Dim _DataBase As New DataSet

    Return _DataBase.Tables.Add("TStatusChamados")

    End Function

    quarta-feira, 19 de setembro de 2007 17:09

Respostas

  •  

     

     

    CREATE PROCEDURE spListarStatusChamados @parametro int = null
    AS
    SELECT * FROM TStatusChamados

     where  campo = isnull(@parametro,campo)
    ORDER BY IdStatusChamado

     

    essa instrucao se vc. nao passar nada no parametro ele mostra tudo caso contrario ele filtra era isso ?
    quarta-feira, 19 de setembro de 2007 17:24
  • nao testei mais veja se funciona

     

     

    CREATE PROCEDURE spListarStatusChamados @parametro1 int = null , @parametro2 int = null
    AS
    SELECT * FROM TStatusChamados

     where  campo between isnull(@parametro1,campo) and isnull(@parametro2,campo)
    ORDER BY IdStatusChamado

     

     

    Abs;

     

    quarta-feira, 19 de setembro de 2007 18:17
  •  

    Oi Vivi,

     

    Pode usar CASE...

     

    ORDER BY CASE WHEN @parâmetro = 1 THEN Coluna1 ELSE Coluna2 END

     

     

    Abraço

    quarta-feira, 19 de setembro de 2007 22:25

Todas as Respostas

  •  

     

     

    CREATE PROCEDURE spListarStatusChamados @parametro int = null
    AS
    SELECT * FROM TStatusChamados

     where  campo = isnull(@parametro,campo)
    ORDER BY IdStatusChamado

     

    essa instrucao se vc. nao passar nada no parametro ele mostra tudo caso contrario ele filtra era isso ?
    quarta-feira, 19 de setembro de 2007 17:24
  • Olá Marcelo, obrigada por responder, era isso mesmo que eu estava precisando, funcionou.

    Aproveitando, tenho mais uma dúvida e talvez vc possa me ajudar: no caso, se eu quiser listar um intervalo de registros de uma tabela, usando between, como ficaria esta procedure já que os parâmetros são opcionais?

    Obrigada!

    quarta-feira, 19 de setembro de 2007 17:50
  • nao testei mais veja se funciona

     

     

    CREATE PROCEDURE spListarStatusChamados @parametro1 int = null , @parametro2 int = null
    AS
    SELECT * FROM TStatusChamados

     where  campo between isnull(@parametro1,campo) and isnull(@parametro2,campo)
    ORDER BY IdStatusChamado

     

     

    Abs;

     

    quarta-feira, 19 de setembro de 2007 18:17
  • Funcionou sim Marcelo, obrigada!

    Mais uma coisa: se eu quiser que o ORDER BY na procedure seja dinâmico, dependendo de uma variável que for passada, como devo proceder?

    Obrigada 

    quarta-feira, 19 de setembro de 2007 19:18
  •  

    Oi Vivi,

     

    Pode usar CASE...

     

    ORDER BY CASE WHEN @parâmetro = 1 THEN Coluna1 ELSE Coluna2 END

     

     

    Abraço

    quarta-feira, 19 de setembro de 2007 22:25