我在用户定义的函数中有以下代码行:
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
该怎么办?
答案 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);