【发布时间】:2016-02-09 19:32:56
【问题描述】:
我想使用如下所示的标量 UDF 来执行逐行操作(我知道这样做的性能限制)。
CREATE FUNCTION [dbo].[correctAbsenceLess25](@value varchar(4))
RETURNS decimal(3,1)
AS
BEGIN
If (@value) = 'A'
RETURN -1
If ((TRY_CONVERT(decimal(3,1),@value)) >= 0.0 AND (TRY_CONVERT(decimal(3,1),@value)) <= 25.0)
RETURN @value
RETURN CAST('Error happened here.' as decimal(3,1));
END
然后我从这样的查询中调用函数:
UPDATE assessmentData
SET assessmentData.weekReviewWk1 = dbo.correctAbsenceLess25(assessmentStaging.weekReviewWk1)
FROM assessmentStaging;
但是,我在assessmentData 表中只得到-1,尽管存在同时满足条件和一些应该引发错误的值的混合。
我知道它是一个标量 UDF 并返回一个值,但它意味着为查询给它的每个值返回一个值,即逐行执行操作和检查,不是吗?
【问题讨论】:
-
assessmentStaging 中 weekReviewWk1 列的值是多少,以及您如何将表assessmentData 与assessmentStaging 结合起来
标签: sql-server tsql user-defined-functions