none
montar uma SP parametrizada... RRS feed

  • Pergunta

  • Pessoal, preciso ter uma sp no banco de dados que receba:

    um codigo, nome da tabela, nome do campo da tabela.

     

    a nescessidade e a seguinte vou passar um codigo como parametro e um nome de tabela. Preciso fazer um select nesta tabela e localizar em um campo passado como parametro se existe um valor igual ao codigo tambem passado como parametro. Se encontrar um valor igual retornar 1 se nao retornar 0. ex..

     

    Aguardo....

     

     

     

    segunda-feira, 2 de abril de 2007 12:19

Respostas

  • Bom dia Luiz, experimenta isso, qualquer coisa retone.

     

    Create Procedure dbo.uSP_ChecaExistencia(
           @Nome_Tabela varchar(100) = null,
           @Nome_Campo  varchar(100) = null,
           @Valor_Campo varchar(100) = null,
           @Retorno int Output) as
    Begin
       If @Nome_Tabela is Null
          Begin
             Print 'O nome da tabela deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If @Nome_Campo is Null
          Begin
             Print 'O nome do campo deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If @Valor_Campo is Null
          Begin
             Print 'O conteúdo do campo deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If Object_Id(@Nome_Tabela) is Null
          Begin
             Print 'A tabela ' + @Nome_Tabela + ' não foi encontrada no banco de dados!'
             Set @Retorno = -1
             Return
          End

       Exec('SELECT * From ' + @Nome_Tabela + ' Where ' + @Nome_Campo + ' = ' + @Valor_Campo)

       If @@RowCount > 0
          Set @Retorno = 1
       Else
          Set @Retorno = 0
    end
    GO

     

     

     

     

    Espero ter ajudado

    segunda-feira, 2 de abril de 2007 12:51
  • Há várias formas de fazer isso, mas vou apresentar uma maneira.

    Considerando que a recuperação será feita no banco de dados local temos:

     

    -- criação da procedure
    create procedure sp_exemplo (@valor varchar(5), @tabela varchar(10), @campo varchar(10))
    as
    begin
     declare @query nvarchar(200)
     set @query='select count(1) qtd from
    '+@tabela+' where '+@campo+'='+@valor
     exec sp_executesql @query
    end

    -- execução da procedure
    exec sp_exemplo '5','clientes','codigo'

    segunda-feira, 2 de abril de 2007 12:58
  • sempre que possivel use a sp_executesql na maioria dos casos ela mantem os planos de execucao.

     

    Abs;

    segunda-feira, 2 de abril de 2007 13:23
  • Luiz, concordo com o Marcelo, sempre que possível utilize a sp_executesql além dela manter o plano de execução ela também fornece mais segurança. O exemplo que te passei foi no objetivo de agilizar e facilitar seu entendimento, contudo seria interessante utilizar a sp_executesql no lugar do Exec.

     

     

     

     

     

    Boa sorte

    Espero ter ajudado

    segunda-feira, 2 de abril de 2007 13:29

Todas as Respostas

  • Bom dia Luiz, experimenta isso, qualquer coisa retone.

     

    Create Procedure dbo.uSP_ChecaExistencia(
           @Nome_Tabela varchar(100) = null,
           @Nome_Campo  varchar(100) = null,
           @Valor_Campo varchar(100) = null,
           @Retorno int Output) as
    Begin
       If @Nome_Tabela is Null
          Begin
             Print 'O nome da tabela deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If @Nome_Campo is Null
          Begin
             Print 'O nome do campo deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If @Valor_Campo is Null
          Begin
             Print 'O conteúdo do campo deve ser informado !'
             Set @Retorno = -1
             Return
          end

       If Object_Id(@Nome_Tabela) is Null
          Begin
             Print 'A tabela ' + @Nome_Tabela + ' não foi encontrada no banco de dados!'
             Set @Retorno = -1
             Return
          End

       Exec('SELECT * From ' + @Nome_Tabela + ' Where ' + @Nome_Campo + ' = ' + @Valor_Campo)

       If @@RowCount > 0
          Set @Retorno = 1
       Else
          Set @Retorno = 0
    end
    GO

     

     

     

     

    Espero ter ajudado

    segunda-feira, 2 de abril de 2007 12:51
  • Há várias formas de fazer isso, mas vou apresentar uma maneira.

    Considerando que a recuperação será feita no banco de dados local temos:

     

    -- criação da procedure
    create procedure sp_exemplo (@valor varchar(5), @tabela varchar(10), @campo varchar(10))
    as
    begin
     declare @query nvarchar(200)
     set @query='select count(1) qtd from
    '+@tabela+' where '+@campo+'='+@valor
     exec sp_executesql @query
    end

    -- execução da procedure
    exec sp_exemplo '5','clientes','codigo'

    segunda-feira, 2 de abril de 2007 12:58
  • sempre que possivel use a sp_executesql na maioria dos casos ela mantem os planos de execucao.

     

    Abs;

    segunda-feira, 2 de abril de 2007 13:23
  • Luiz, concordo com o Marcelo, sempre que possível utilize a sp_executesql além dela manter o plano de execução ela também fornece mais segurança. O exemplo que te passei foi no objetivo de agilizar e facilitar seu entendimento, contudo seria interessante utilizar a sp_executesql no lugar do Exec.

     

     

     

     

     

    Boa sorte

    Espero ter ajudado

    segunda-feira, 2 de abril de 2007 13:29