2014-03-31 61 views
0

對於時間計算表,我編寫了兩個標量函數來檢索返回值。使用標量函數的返回值計算新結果

USE [SECI] 
GO 
/****** Object: UserDefinedFunction [dbo].[sfCIKorr] Script Date: 31.03.2014 14:14:04 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
ALTER FUNCTION [dbo].[sfCIKorr] 
( 
    -- Add the parameters for the function here 
    @dteCheckInTime datetime, 
    @dtePlanTimeCheckIn datetime 

) 

RETURNS datetime 
as 
BEGIN 
Declare @dteCIKorr datetime 

    --CheckInTime correction 
    If @dteCheckInTime > 0 And @dtePlanTimeCheckIn > 0 
     Begin 
     set @dteCIKorr = @dtePlanTimeCheckIn 
     end 
    else If @dteCheckInTime < @dtePlanTimeCheckIn 
     begin 
     set @dteCIKorr = @dtePlanTimeCheckIn 
     end  
    Else If (@dteCheckInTime > @dtePlanTimeCheckIn) And (@dteCheckInTime < DateAdd(minute, 15, @dtePlanTimeCheckIn)) 
     begin 
     set @dteCIKorr = @dtePlanTimeCheckIn 
     end 
    Else If @dteCheckInTime > DateAdd(minute, 15, @dtePlanTimeCheckIn) 
     begin 
     set @dteCIKorr = dbo.sfRoundToHourParts(@dteCheckInTime, 4) 
     End 
    Else If @dteCheckInTime > 0 And @dtePlanTimeCheckIn = 0 
     begin 
     set @dteCIKorr = dbo.sfRoundToHourParts(@dteCheckInTime, 4) 
     end 
    Else If @dteCheckInTime = 0 
     begin 
     set @dteCIKorr = 0 
     End 

    return @dteCIKorr 
end 

二之一: dbo.sfRoundToHourParts(聚結(CheckOutTime, ''),4),其向上或向下取四分之一小時。

兩個工作正常,但現在我想用在更新查詢的結果來檢索另一個結果應該是這樣的:

從VBA碼:

If dteCheckInTime > 0 And dteCheckOutTime > 0 Then 
     dteCalculatedTime = Format(DateDiff("n", dteCIKorr, dteCOKorr)/1440, "hh:nn") 
    Else 
     dteCalculatedTime = 0 
    End If 

因此,作爲最終的結果,我想這樣做:

Update mytable 
set CheckInTimeCorr= dbo.sfCIKorr(@dteCheckInTime, @dtePlanTimeCheckIn), 
CheckOutTimeCorr=dbo.sfRoundToHourParts(coalesce(CheckOutTime,''), 4), 
CalculatedTime= see my VBA-Code! 
Select from mytable 

所以我需要兩個functiuons檢索,我需要做的進一步步驟中的計算結果。順便說一下,我不知道,如果使用兩個標量函數是迫切需要完成我的查詢或我可以更好地在內聯表函數中執行此操作。

感謝您的幫助。 邁克爾

回答

0

如果CalculatedTime列總是取決於CheckInTimeCorr和CheckOutTimeCorr價值觀,我想創建它作爲一個計算列(http://technet.microsoft.com/en-us/library/ms188300.aspx):

ALTER TABLE tbl ADD CalculatedTime AS (--your code here--) 

我想幫你的實際定義列,但無法讀取VBA :(