Erro de tipo

31/08/2012

0

Pessoal, usei o seguinte scritp pra criar uma procedure:

IF (OBJECT_ID('_CheckList_Arquivos_SQL') IS NOT NULL) drop table _CheckList_Arquivos_SQL

create table dbo._CheckList_Arquivos_SQL (
[Name] varchar(250) , [FileName] varchar(250) , [Size] bigint, [MaxSize] bigint, Growth varchar(100),
Proximo_Tamanho bigint, Situacao varchar(15))

insert into dbo._CheckList_Arquivos_SQL
select convert(varchar, name) as NAME ,Filename ,
cast(Size * 8 as bigint) / 1024.00 Size,
case when MaxSize = -1 then -1 else cast(MaxSize as bigint)* 8 / 1024.00 end MaxSize,
case when substring(cast(Status as varchar),1,2) = 10 then cast(Growth as varchar) + ' %'
else cast (cast((Growth * 8 )/1024.00 as numeric(15,2)) as varchar) + ' MB'end Growth,
case when substring(cast(Status as varchar),1,2) = 10
then (cast(Size as bigint) * 8 / 1024.00) * ((Growth/100.00) + 1)
else (cast(Size as bigint) * 8 / 1024.00) + cast((Growth * 8 )/1024.00 as numeric(15,2))
end Proximo_Tamanho ,
case when MaxSize = -1 then 'OK' -- OK
when
( case when substring(cast(Status as varchar),1,2) = 10
then (cast(Size as bigint)* 8 / 1024.00) * ((Growth/100.00) + 1)
else (cast(Size as bigint) * 8/ 1024.00) + cast((Growth * 8 )/1024.00 as numeric(15,2))
end
) < (cast(MaxSize as bigint) * 8/1024.00) then 'OK' else 'PROBLEMA'
end Situacao
from master..sysaltfiles with(nolock)
order by Situacao, Size desc

Logo depois o script pra inseri em arquivo:

INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=E:\CheckList\CheckList do Banco de Dados.xls;',
'SELECT [DataBase],[File Name],[Tamanho(MB)],[Tamanho Max(MB)],[Crescimento],[Próximo Tamanho], [Situacao] FROM [Arquivos SQL$]')
select Name,FileName,Size,MaxSize,Growth,Proximo_Tamanho,Situacao
from dbo._CheckList_Arquivos_SQL
order by Situacao desc, Size desc

E retorna o seguinte erro:

Error converting data type varchar to float.

Verifiquei os tipo definidos na criação da procedure e não encontrei o erro ainda. Alguém consegue me dar uma dica.

Agradeço desde já!
Jerfeson

Jerfeson

Responder

Posts

26/09/2012

Marcos Kruger

Tá um pouco enrolado o seu código...

Para encontrar o problema quebre o seu código em pequenas partes, exemplo deixa apenas uma coluna simplificando a parte do case até encontrar a parte que está dando problema.

Talvez está nessa parte abaixo, depende dos valores que vem para o campo.

cast((Growth * 8 )/1024.00 as numeric(15,2))


Isolando o código em várias partes é um bom caminho para descobrir alguns problemas.

Outra dica é alterar o arquivo CheckList do Banco de Dados.xls deixando somente uma linha para ver se dá o problema.


[]'s
Responder

27/09/2012

Jerfeson

Esse problema está acontecendo no SQL 2005 Server. Usei o mesmo script no SQL 2000 Server e funcionou perfeitamente.
Responder

27/09/2012

Alisson Santos

Dificil entender o seu código, mais o erro está no cast, pois primeiro você está fazendo um cast quando transforma ele para string e depois para float.
Edenta e verifique os casts.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar