0

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

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为未知时

4

2 回答 2

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);
于 2013-08-02T09:17:13.327 回答
1

顺便说一句,如果您使用的是 SQL 2012+,那么您可以使用新Try_Cast()功能

SET @annualStr = dbo.GetXMLValues(@businessId,@id);
SET @annual = Coalesce(Try_Cast(@annualStr As float), 0);
于 2013-08-02T09:56:24.157 回答