Usuário com melhor resposta
[Select in] Erro ao fazer Select in utilizando o resultado de outra consulta em uma variável. E agora?

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
Respostas
-
Deleted
- Sugerido como Resposta Durval RamosModerator quarta-feira, 12 de novembro de 2014 09:42
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 12 de novembro de 2014 17:39
-
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
- Sugerido como Resposta Durval RamosModerator quarta-feira, 12 de novembro de 2014 09:42
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 12 de novembro de 2014 17:39
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
-
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
-
-
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!" 改 善 -
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
-
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
-
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!" 改 善 -
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
- Sugerido como Resposta Durval RamosModerator quarta-feira, 12 de novembro de 2014 09:42
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 12 de novembro de 2014 17:39
-
Deleted
- Sugerido como Resposta Durval RamosModerator quarta-feira, 12 de novembro de 2014 09:42
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 12 de novembro de 2014 17:39
-