Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafa-martin

como montar string select usando proc

Recommended Posts

pessoal eu preciso fazer uma proc onde ela vai montar um select.

 

por exemplo: quando eu passar o paramentro que seria os campos, ou nenhum campo e passar a base então ele deveria montar a string select.

 

por exemplo:

 

exec proc_montasql 'campo1, campo2', 'base de dados', 'tabela'

select campo1, campo2 from base de dados..tabela

 

outro exemplo:

 

exec proc_montasql 'campo2', 'base de dados', 'tabela'

select campo2 from base de dados..tabela

 

outro exemplo:

 

exec proc_montasql 'base de dados', 'tabela'

select * from base de dados..tabela

 

 

como seria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa, o exemplo abaixo nosso amigo Eriva postou e deve lhe ajudar: (http://forum.imasters.com.br/index.php?showtopic=256134)

 

use pubs;

 

declare @table varchar(100)

 

set @table = 'titles'

exec ('select top 5 * from '+ @table)

 

set @table = 'authors'

exec ('select top 5 * from '+ @table)

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa, a meu ver, você somente poderia passar um campo, por causa do select.

a nao ser que faça uma uma funcao ou um if verificando se o campo for vazio ele ignorar, mas depende do caso.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos ver se eu entendi:

 

declare @campo1 nvarchar(100)

declare @campo2 nvarchar(100)

declare @campo3 nvarchar(100)

 

set @campo1 = 'campo1'

set @campo2 = 'campo2'

set @campo3 = 'campo3'

 

 

 

exec ('select top 1 ' + @campo1 + ',' + @campo2 +','+ @campo3 +' from tabela')

 

Dah pra ter uma ideia.

 

Montei isso em um ambiente de teste.

Me diz uma coisa, você esta tentando fazer uma proc q monte qq select? soh o cara passar qq qtde de campo e ele monta o select, eh isso?

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso, quero montar uma proc q monta qualquer select. só que os campos teria que passar como parametro. tipo só que eu quero limitar pra informar só 3 campos da tabela que passou como parametro. só que como para metro aí fica mais complicado, porque aí ficaria varias variaveis para passar como parametro.

 

então a idéia e fazer mais ou menos o que você fez. só que aí como eu fazer pra informar esses campos da tabela numa procedure? os cmapos nem sempre serão os mesmos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

simples:

 

cria a procedures desta forma:

 

-- cria procedure de teste passando como parametros 3 campos
CREATE PROCEDURE TESTE

@campo1 nvarchar(100)
@campo2 nvarchar(100)
@campo3 nvarchar(100)

AS
exec ('select top 1 ' + @campo1 + ',' + @campo2 +','+ @campo3 +' from tabela')

GO

É soh isso. Antes do "as" da procedure você poe o campo e o tipo de dados do campo que vai receber como parametro.

 

=D

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

até agora fiz assim minha procedure

 

Create Procedure dbo.Monta_Select
(
	@tabela Varchar(80),
	@base_dados Varchar(50)
)

As

Set Nocount on
Set Transaction Isolation Level Read Uncommitted

Begin

	Declare	
		@sSql Varchar(4000)

	
		Set @sSql = 'Select * From '+ @base_dados+'..'+@tabela
		Exec (@sSql)
	
End

 

você viu que já tem dois parametros. dessa forma que você disse terei que colocar mais 3 parametros. aí quando tiver q chamar a proc vou ter q passar 5 parametros... é inviável.

 

e dessa forma q você disse pra colocar os campos na proc, não dá. porque eu nem sempre vou fazer o select na mesma tabela. entendeu? por isso naum posso colocar os campos fixos na procedure.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa,

 

do jeito que esta kerendo fazer, eu em particular nao conheço um modo, pq se a pessoa ker fazer um select de determinados campos, você tem fazer ele informar estes campos.

Fizemos uma aplicação uma vez e .NET que fazia isso. Era uma tela que a pessoa escolhia os campos, a tabela e trazia os resultados. Mas era uma view que fazia o select e nao uma procedure.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

então só pensei numa coisa melhor. tipo em vez de gerar o select de uma determinada tabela e de alguns campos, tem como eu fazer pra quando ele executar a proc apenas gerar o select de algumas tabelas que ele informa? tipo usando sysobjects, syscolumns, systypes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafa,

 

jeito rapido de resolver. (que isso tah pior q novela mexicana) =)

 

-- cria procedure de teste passando como parametros 1 campos
CREATE PROCEDURE TESTE

@campo1 nvarchar(100)

AS
exec ('select top 1 ' + @campo1 +' from tabela')

GO

qdo você passa um campo pela procedure, você poe virgula entre eles.

 

Olha o teste que fiz:

 

exec TESTE campo1,campo2

 

me retornou

 

select campo1,campo2 from tabela

 

 

neste caso você pode passar um campo, como 3, 4, 5 campos.

 

^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.