日期:2014-05-19  浏览次数:20628 次

SQL自定义函数问题-特急,在线等
自定义函数如下(不完整):
CREATE   function   fn_GetRegDays   (@RegTime   smalldatetime,   @GoTime   smalldatetime)
returns   smalldatetime
as
begin
declare   @NightTimeStr                 varchar(5)
declare   @NoonTimeStr                 varchar(5)
declare   @AfterNoonTimeStr   varchar(5)
declare   @Now                                             datetime

declare   @NightTime                           smalldatetime
declare   @CalcTime                             smalldatetime

SELECT   @Now   =   now   from   V_NOW

select   @NightTimeStr   =   fld_nighttime,     @NoonTimeStr=fld_noontime,   @AfterNoonTimeStr=fld_afternoontime     from   tbl_company

SET   @NightTime   =   cast(cast(datepart(yyyy,   @RegTime)   as   varchar)   +   '- '   +   cast(datepart(mm,   @RegTime)   as   varchar)   +   '- '   +   cast(datepart(dd,@RegTime)   as   varchar)   +   '   '   +   @NightTimeStr   as   smalldatetime)
SET   @CalcTime   =     cast(cast(datepart(yyyy,   @RegTime)   as   varchar)   +   '- '   +   cast(datepart(mm,   @RegTime)   as   varchar)   +   '- '   +   cast(datepart(dd,@RegTime)   as   varchar)   +   '   '   +   @NoonTimeStr   as   smalldatetime)

                            if   (datediff(n,   @RegTime,   @NightTime) <0)    
begin
SET   @CalcTime   =   dateadd(dd,   1,   @CalcTime)
end

return   @CalcTime
end


然后我的查询如下:
select   *,   dbo.fn_GetRegDays(fld_regdt,   fld_godt)   From   tbl_reginfo

假若这个SQL查询有1000条记录,那那个fn_GetRegDays   函数是执行一次还是1000次,
如果是执行1000次,如果执行1000次那不是效率很低,因为我自定义函数里面有好几个Select语句啊...如何改进?

------解决方案--------------------
关联获取出函数中的值,在计算。。。~~
个人看法。。