none
[Select in] Erro ao fazer Select in utilizando o resultado de outra consulta em uma variável. E agora? RRS feed

  • Pergunta

  • Olá,

    Estou tentando fazer um select com condição in, mas estou levando erro.

    Antes de fazer o select in, faço outra consulta que me gera um retorno do tipo:

    '12456987','12356487','12453628','12455789','12455658'

    Tendo este valor em uma variável, eu tento entao fazer o select in, mas recebo o seguinte erro:

    Msg 8115, Level 16, State 6, Line 27
    Arithmetic overflow error converting nvarchar to data type numeric.

    O que pode ser?

    Segue script do Select in que recebe o erro descrito:

    select CPF
    from Acessos
    where		  Data >= '2014-11-06 00:00:00.000'
    		and   Data <= '2014-11-06 23:59:59.999'		
    		and	  CPF in 		
    						(
    							select left(@faltantes, len(@faltantes)-2)								
    						)	
    		
    group by CPF
    having count(*) > 1	

    Informo que faço antes do select acima, um outro. Neste outro select preencho os dados para a variável abaixo:

    declare @faltantes nvarchar(max)

    E informo também que o retorno do select abaixo é o valor descrito acima ('12456987','12356487','12453628','12455789','12455658')

    O que pode ser?

    Não posso fazer um select in utilizando uma variável?

    Obrigado


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善




    • Editado TI DEV terça-feira, 11 de novembro de 2014 17:12
    terça-feira, 11 de novembro de 2014 17:06

Respostas

  • Deleted
    terça-feira, 11 de novembro de 2014 20:36
  • Olá,

    No meu caso preciso que seja feito com a string :\

    Isto não funciona com o select in?

    select Nome
    From Pessoa
    where IdPessoa in (variavelString)

    Obrigado


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    Funciona não...

    Tente dessa forma...

    declare @exec varchar(8000) = '';
    
    set @exec =
    '
    select Nome
    From Pessoa
    where IdPessoa in (' + @variavelString + ')
    '
    
    exec(@exec);
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 11 de novembro de 2014 18:44

Todas as Respostas

  • Você vai precisar colocar o resultado da sua variável em uma tabela.

    Poste a sua consulta que gera esse resultado "('12456987','12356487','12453628','12455789','12455658')".

     

    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 11 de novembro de 2014 17:24
  • Isso tá mais para erro de conversão, a variável Data é do tipo DATE mesmo?, pois se for tem que fazer um convert:
    CONVERT(DATETIME, '2014-11-06 00:00:00:.000', 111)



    • Editado Mr. GMSOFT terça-feira, 11 de novembro de 2014 17:33
    terça-feira, 11 de novembro de 2014 17:32
  • Olá,

    Não posso fazer o select in a partir de uma variável?

    Obrigado


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    terça-feira, 11 de novembro de 2014 17:37
  • Olá,

    Vejo também que não posso fazer a declaração e atualização abaixo:

    declare @faltantes nvarchar(max)
    set @faltantes = '0124578451256','32541111121212';

    Abs


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    terça-feira, 11 de novembro de 2014 17:39
  • Olá Tulio Rosa,

    Segue meu script para consulta e atualização de variável.

    declare @faltantes nvarchar(max)
    
    select	@faltantes = '''0'
    select	@faltantes = @faltantes  + STUFF(
    		(
    			select '0' + CPF  + ''','''
    			from Funcionario Func
    			where Func.IdFunc  in (
    											select IdFunc
    											FROM Acesso
    											where Data	= '2014-11-06'
    									
    											group by IdFunc
    											having count(*) = 1
    										)
    								
    			order by 1
    			FOR XML PATH('')
    		) ,1,1,'')
    		
    select left(@faltantes, len(@faltantes)-2)	

    O script acima preenche a minha variável da seguinte forma:

    '12456987','12356487','12453628','12455789','12455658'

    Abs


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善


    • Editado TI DEV terça-feira, 11 de novembro de 2014 17:45
    terça-feira, 11 de novembro de 2014 17:45
  • Veja se dessa forma resolve...

    ;with cte_faltantes as
    (
    	select	'0' + CPF as CPF
    	from	Funcionario Func
    	where	Func.IdFunc  in 
    	(
    			select IdFunc
    			FROM Acesso
    			where Data	= '2014-11-06'
    			group by IdFunc
    			having count(*) = 1
    	)
    	order by 1
    )
    select CPF
    from Acessos
    where		  Data >= '2014-11-06 00:00:00.000'
    		and   Data <= '2014-11-06 23:59:59.999'		
    		and	  CPF in 		
    						(
    							select cpf from cte_faltantes
    						)	
    		
    group by CPF
    having count(*) > 1	


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 11 de novembro de 2014 17:59
  • Olá,

    No meu caso preciso que seja feito com a string :\

    Isto não funciona com o select in?

    select Nome
    From Pessoa
    where IdPessoa in (variavelString)

    Obrigado


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    terça-feira, 11 de novembro de 2014 18:33
  • Olá,

    No meu caso preciso que seja feito com a string :\

    Isto não funciona com o select in?

    select Nome
    From Pessoa
    where IdPessoa in (variavelString)

    Obrigado


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    Funciona não...

    Tente dessa forma...

    declare @exec varchar(8000) = '';
    
    set @exec =
    '
    select Nome
    From Pessoa
    where IdPessoa in (' + @variavelString + ')
    '
    
    exec(@exec);
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 11 de novembro de 2014 18:44
  • Deleted
    terça-feira, 11 de novembro de 2014 20:36
  • Olá José Diz,

    Irei testar assim que tiver algum tempo.

    Abs


    K2rto'4 - Analista de Sistemas
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善

    quinta-feira, 13 de novembro de 2014 14:02