Usuário com melhor resposta
montar uma SP parametrizada...

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....
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
endIf @Nome_Campo is Null
Begin
Print 'O nome do campo deve ser informado !'
Set @Retorno = -1
Return
endIf @Valor_Campo is Null
Begin
Print 'O conteúdo do campo deve ser informado !'
Set @Retorno = -1
Return
endIf Object_Id(@Nome_Tabela) is Null
Begin
Print 'A tabela ' + @Nome_Tabela + ' não foi encontrada no banco de dados!'
Set @Retorno = -1
Return
EndExec('SELECT * From ' + @Nome_Tabela + ' Where ' + @Nome_Campo + ' = ' + @Valor_Campo)
If @@RowCount > 0
Set @Retorno = 1
Else
Set @Retorno = 0
end
GOEspero ter ajudado
-
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' -
-
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
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
endIf @Nome_Campo is Null
Begin
Print 'O nome do campo deve ser informado !'
Set @Retorno = -1
Return
endIf @Valor_Campo is Null
Begin
Print 'O conteúdo do campo deve ser informado !'
Set @Retorno = -1
Return
endIf Object_Id(@Nome_Tabela) is Null
Begin
Print 'A tabela ' + @Nome_Tabela + ' não foi encontrada no banco de dados!'
Set @Retorno = -1
Return
EndExec('SELECT * From ' + @Nome_Tabela + ' Where ' + @Nome_Campo + ' = ' + @Valor_Campo)
If @@RowCount > 0
Set @Retorno = 1
Else
Set @Retorno = 0
end
GOEspero ter ajudado
-
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' -
-
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