Array
(
)

Erro de tipo

Jerfeson
   - 31 ago 2012

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á!

Kruger
   - 26 set 2012

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.

#Código

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

Jerfeson
   - 27 set 2012

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

Alisson
|
MVP
Pontos: 3400
    27 set 2012

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.