Ir para conteúdo

POWERED BY:

Arquivado

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

David Ramires

Problemas com procedure dinâmica

Recommended Posts

Pessoas, tudo certo?

tenho que montar uma procedure dinâmica que até agora não está funcionando muito bem devido a mensagem:

Arithmetic overflow error converting varchar to data type numeric.

bom segue uma parte da minha procedure para vocês entenderem.

 

.
.
DECLARE @INST VARCHAR(8000)	  
DECLARE @CLAUSULA VARCHAR(8000)	  
DECLARE @TMP_DDD VARCHAR(8)
DECLARE @T_MIN NUMERIC(10,2)
.
.
.
.
SET @INST = @INST +' SELECT ' +  @T_MIN + ' = CONVERT(NUMERIC(10,2),SUM(TOTAL_MINUTOS))  '
SET @INST = @INST +' FROM '+ @TMP_DDD +' A (NOLOCK) INNER JOIN TB_ESTADOS AS B (NOLOCK) '
SET @INST = @INST +'	 ON A.COD_ESTADO = B.COD_ESTADO  '

 

o problema está quando eu coloco a variável @T_MIN dentro dessa proc.

e como tinha citado ele emite um erro.

como poderia resolver isto ?

 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro ocorre quando você insere a variável @T_MIN porque você está tentando concatenar varchar com decimal.

 

exemplo de query dinâmica :

 

DECLARE @TB VARCHAR(20)

DECLARE @QY VARCHAR(600)

 

SET @TB = 'table1'

SET @QY = N'select * from ' + @TB

 

EXEC(@QY)

 

 

Tente adaptar para sua necessidade.

 

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Alex por responder,

mas o exemplo que você me passou,

acho que não vai dar certo no que eu preciso,

pois eles estão como VARCHAR, se fosse isso tudo bem. (não sei se entendi errado o que você quis dizer)

 

mas

eu realmente preciso ter @T_MIN como NUMERIC(10,2) dentro de @INST ...

eu já passei por uma situação parecida com DATA, mas resolvi fazer diferente neste caso.

mas no de ter a variável @T_MIN, vai ter que ficar assim ou vou ter que bolar outro jeito de montar essa querie..

 

alguma idéia ?

 

Valew.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você precisa de uma query dinâmica , onde nela terá variáveis numéricas(int, tinyint, float ...), você terá que usar a SP sp_executesql.

você não vai concatenar numéricas com não numéricas.

 

DECLARE @NUM_ID INT

SET @NUM_ID = 25

 

execute sp_executesql

N'select * from TABELA where ID = @ID', -- query

N'@ID int', -- 'declaração' da variável dentro da query

@ID = @NUM_ID -- valor recebido pela variável usada na query

 

 

Com isso é possível montar qualquer query dinâmica necessária. Espero que com o isso, você resolva seu problema David.

 

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!!! Obrigado ...

 

vou fazer o teste e amanhã eu posto aqui .... o que acoteceu..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alex.. beleza

legal era algo assim que estou procurando, agora preciso

ver se consigo montar a procedure utilizando o esquema que você me passou,

pois no meio dessa procedure tem alguns calculos ...

bom vou tentar aqui montar ... assim que terminar posto aqui se deu certo ou não...

 

desde já agradeço atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz um teste, veja como ficou meu exemplo:

 

DECLARE @SQLSTRING NVARCHAR(2000)
DECLARE @DECLARE NVARCHAR(4000)
CREATE TABLE #TMP_TESTE (LOG_SERVICO VARCHAR(25))

SET @SQLSTRING = N'SELECT LOG_SERVICO FROM TABELA WHERE LOGDTHORA BETWEEN @DT_I AND @DT_F AND LOG_SERVICO = @SERVICO' 
SET @DECLARE   = N'@LOG_SERVICO VARCHAR(8000), @DT_I DATETIME, @DT_F DATETIME' 

INSERT INTO #TMP_TESTE  EXECUTE sp_executesql 

	@SQLString, -- QUERY STRING
	@DECLARE,   -- AS DECLARAÇÕES	
	@LOG_SERVICO = 1001,			 
	@DT_I = '2008-04-03',		   
	@DT_F = '2008-04-04 23:59:59.999'

Agora vou adaptar as minhas necessidades..

 

valew Alex.

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.