我建立这个UDFUDF不返回相同的值选择包含在UDF
CREATE FUNCTION [dbo].[HasExtendedRetentionSamples] (@BoxNumber varchar(20))
RETURNS int
AS
BEGIN
declare @cnt int
set @cnt = 0
select @cnt = (select count(*)
from tFreezerBoxInfo bi
inner join tFreezerDetails fd on fd.boxTrayId = bi.boxTrayId
inner join tncDrugTestListNew dt on dt.labnumber = fd.labnumber
inner join ExtendedRetentionSites a on dt.number = a.number
where boxnumber = 'ND011811001'
and
case isnull([retention],0)
when 0 then proposedDestructionDate
else dateadd(dd,abs([retention]),proposedDestructionDate)
end <> proposedDestructionDate)
return @cnt
END
当我执行UDF
select dbo.[HasExtendedRetentionSamples] ('ND011811001')
返回值0,这是不正确,
当我执行包含在UDF中的SQL语句(用'ND011811001'代替@BoxNumber)时...
select count(*)
from tFreezerBoxInfo bi
inner join tFreezerDetails fd on fd.boxTrayId = bi.boxTrayId
inner join tncDrugTestListNew dt on dt.labnumber = fd.labnumber
inner join ExtendedRetentionSites a on dt.number = a.number
where boxnumber = 'ND011811001'
and
case isnull([retention],0)
when 0 then proposedDestructionDate
else dateadd(dd,abs([retention]),proposedDestructionDate)
end <> proposedDestructionDate
返回值5,这是正确的。
所以最大的问题是WHY?
连接& case语句中的所有数据类型都是相同的。
我注意到你的UDF使用的是硬编码的BoxNumber值,而不是你传入的参数。这可能没有什么区别,但它肯定是你在声明函数“完成”之前想要改变的东西。 – 2012-03-15 21:11:28