在SQL Server中的UDF中使用Try Catch Block

时间:2013-08-02 09:12:17

标签: sql sql-server sql-server-2008

我在用户定义的函数中有以下代码行:

declare @annualStr  varchar(30)
declare @annual float
    begin try
          set @annualStr = dbo.GetXMLValues(@businessId,@id)
          set @annual = convert(float,isnull(@annualStr,'0'))
    end try
    begin catch
          set @annual = 0
    end catch

来自dbo.GetXMLValues的值可能是varchar值,因此我需要使用try catch块将值转换为float ..

但是它会抛出一个错误说...在UDF中使用try catch块是无效的

为什么?如果未知

,请将varchar值转换为float该怎么办?

2 个答案:

答案 0 :(得分:2)

根据评论更新。

SET @annualstr = dbo.GetXMLValues(@businessId,@id);

IF @annualstr NOT LIKE '%[^0-9.]%' AND  @annualstr NOT LIKE '%.%.%' 
  BEGIN
    SET @annual = Cast(@annualstr As float);
  END;

SET @annual = Coalesce(@annual, 0);

答案 1 :(得分:1)

顺便提一下,如果您使用的是SQL 2012+,那么您可以使用新的Try_Cast()函数

SET @annualStr = dbo.GetXMLValues(@businessId,@id);
SET @annual = Coalesce(Try_Cast(@annualStr As float), 0);