环境是SQL2000+SP4
系统是WinXp3情况是数据库中有一个字段写的是规格(字段类型是varchar(50)),存放的内容一般都是一些数字,也有部分字母。
想要设计一个函数,当字段内容可以转换为浮点时,就转换为浮点返回,否则返回0就可以。我不明白的是怎么做错误处理或者说怎么实现上述的功能吗,请各位老师给看看。(下面是我写的)--定义
CREATE FUNCTION dbo.cwy (@guige varchar(50))
RETURNS float
AS 
begin
DECLARE @VALUE float
SET @VALUE=CONVERT(float,@guige)
IF @@ERROR<>0
SET @VALUE=0
return @value
END
GO
--测试
SELECT dbo.cwy('123')-- 正常返回123.0
select dbo.cwy('abc')--报错

解决方案 »

  1.   

    直接用sql 语句即可.select case when ISNUMERIC(@guige) = 1 then cast(@guige as decimal(18,2)) else 0 end
      

  2.   

    declare @guige varchar(50)set @guige = '123'select case when ISNUMERIC(@guige) = 1 then cast(@guige as decimal(18,1)) else 0 end
    /*
                         
    -------------------- 
    123.0(所影响的行数为 1 行)
    */set @guige = 'abc'select case when ISNUMERIC(@guige) = 1 then cast(@guige as decimal(18,1)) else 0 end/*
                         
    -------------------- 
    .0(所影响的行数为 1 行)
    */
      

  3.   

    如果要用函数.则参考如下:
    --定义
    CREATE FUNCTION dbo.cwy (@guige varchar(50))
    RETURNS float
    AS 
    begin
    declare @value as float
    if ISNUMERIC(@guige) = 1 
       set @value = cast(@guige as float)
    else
       set @value = 0
    return @value
    END
    GO--测试
    SELECT dbo.cwy('123')
    /*
                                                          
    ----------------------------------------------------- 
    123.0(所影响的行数为 1 行)
    */select dbo.cwy('abc')--报错
    /*                                                      
    ----------------------------------------------------- 
    0.0(所影响的行数为 1 行)
    */drop function dbo.cwy