Ir para conteúdo

Arquivado

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

Tiago Nader Lana

no SELECT!

Recommended Posts

Olá galera,

 

estou tentando montar um script que me retorne num SELECT um valor cujo o nome da coluna que estou

comparando no WHERE está armazenado numa variável.

 

Coloquei um exemplo abaixo:

 

Declare @Coluna char(2)Declare @Cont intSet @Cont = 1While (@Cont <= 4)Begin   Set @Coluna = ('p'+Convert(char(1),@Cont))   SELECT * FROM TESTE where @Coluna = 'a'   Set @Cont = @Cont + 1End

Alguém sabe resolver isso ???

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

falai Tiago,

 

pra fazer isso você terá que colocar a string inteira do select em uma string e dar um execute nela, veja um exemplo neste tópico http://forum.imasters.com.br/index.php?sho...9096&hl=execute

 

outro exemplo:

use pubs;declare @tabela varchar(30)declare @colunaID varchar(30)declare @valorID varchar(30)--TESTE 1set @tabela = 'authors'set @colunaID = 'au_id'set @valorID = '172-32-1176'execute ('select * from ' + @tabela + ' where ' + @colunaID + ' = ''' + @valorID + '''')--TESTE 2set @tabela = 'employee'set @colunaID = 'emp_id'set @valorID = 'PMA42628M'execute ('select * from ' + @tabela + ' where ' + @colunaID + ' = ''' + @valorID + '''')
t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok eriva...funcionou perfeitamente...só não consigo comparar se o @valorID é nulo ou não.já tentei:set @valorID = '<NULL>'set @valorID = 'NULL'set @valorID = 'null'set @valorID = '<null>'estou trabalhando com Sql Server 2000.aguardo um retornoabraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiago,

 

pra comparar null tem o IS NULL

select * from tabela where campo IS NULLselect * from tabela where campo IS NOT NULL

ou pode-se usar a função ISNULL jogar um valor padrão, desta forma quando for null será atribuido este valor padrão, dai pode-se usar operadores para realizar a verificação

select * from tabela where ISNULL(campo,'') = ''select * from tabela where ISNULL(campo,'') <> ''

abraço

t++

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá eriva....

 

obrigado novamente...

 

supondo q eu tenha uns 20 campos nessa tabela, todos nessa sequência: p1, p2, p3 .... p20.

 

e preciso percorrer todos, e contar quais não estão nulos....

 

como faria para comparar se o EXECUTE me retornou algo ou não?

 

tentei:

if exists (execute('select * from ' + @tabela + ' where codigo = ' + @codigo + ' and ' + @colunaID + ' IS NOT NULL'))
mas não funcionou....

 

não tem como o execute me retornar algo, como falso ou verdadeiro, ou então 0 ou 1 ???

 

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz só consegui usando tabela virtual global, fiz usando o count(*) pra contar quantos são null

 

use pubs;declare @tabela varchar(30)declare @colunaID varchar(30)set @tabela = 'titles'set @colunaID = 'price'execute ('select count(*) as Contador into ##teste from ' + @tabela + ' where ' + @colunaID + ' IS NULL')select * from ##testedrop table ##teste

se descobrir de outra forma posta ae, q isto é bem interessante

 

falows

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

e pra eu fazer isso com uma procedure....como vou setar uma proceduretipo:declare @comandoset @comando = proc_telefone 22, 2222-222, 20,1--procedure, ddd, telefone, registros exibidos, na pagina 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae você tem q usar a tabela virtual semelhante ao que foi usado acima

 

declare @comando varchar (100)declare @registros intdeclare @paginas intdeclare @DDD varchar (2)declare @telefone varchar(10)set @ddd = '22'set @telefone = '2622-0005'set @registros = 20set @paginas = 1set @comando = 'declare @retorno int; set @retorno = proc_telefone_s '+char(39)+@ddd+char(39)+','+char(39)+@telefone+char(39)+','+(convert(varchar(30),@registros))+','+(convert(varchar(30),@paginas)) + '; select @retorno as retorno into ##teste''select @comandoexec @comando--aqui você recupera o retornoselect * from ##teste--destroy a tabvirtualdrop table ##teste

Compartilhar este post


Link para o post
Compartilhar em outros sites

declare @comando varchar (100)declare @registros intdeclare @pagina intdeclare @DDD varchar (2)declare @fone1 varchar(10)set @ddd = @dddset @fone1 = @fone1set @registros = 20set @pagina = 1set @comando = ''declare @retorno varchar(200)set @retorno = 'tel_telefone_s' +char(39)+@ddd+char(39)+','+char(39)+@fone1+char(39)+','+(convert(varchar(30),@registros))+','+(convert(varchar(30),@pagina))select @retorno as retorno into ##testeselect @comandoexec @comando--aqui você recupera o retornoselect count (*) from ##teste--destroy a tabvirtualdrop table ##testeessa porcaria de procedure num funciona...ja não sei mais como colocar um "exec" dentro de um "set" para executar a varial que eu "setei"declare @testeset @teste = exec proc_teste_sselect count (@teste) from tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa parte da errada:

set @comando = ''declare @retorno varchar(200)set @retorno = 'tel_telefone_s' +char(39)+@ddd+char(39)+','+char(39)+@fone1+char(39)+','+(convert(varchar(30),@registros))+','+(convert(varchar(30),@pagina))select @retorno as retorno into ##testeselect @comandoexec @comando--aqui você recupera o retornoselect count (*) from ##teste

veja no exemplo acima a variavel @retorno esta dentro da variavel @comando e naum tem este count(*) na consulta em ##teste

 

t+

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.