在表值函数中修改参数-日期时间-UTC本地

时间:2018-10-12 00:59:31

标签: sql-server table-functions data-vault

我正在使用2型数据仓库,目前正在研究一种功能,以尝试为某些用户模拟数据立方体,以从特定快照中快速提取数据。

目前,我可以通过转换联接(或where子句)上的参数来修改代码以使其工作,但是这会导致100,000条记录的性能降低3秒。

出于性能考虑,可以执行

set @AsAt = dbo.AdjustLocalToUtc(@AsAt)

在return语句之前的某个位置,或者可能在开始时。

代码块-如果已通过UTC值,则可以使用

ALTER FUNCTION dbo.fn_Ticket_AsAt
(
    @AsAt datetime      --Local Time for User Confort
)
RETURNS TABLE 
AS 
RETURN
(
    Select * 
    from dvr.hub_ticket hub
    join dvr.sat_ticket sat
        on hub.hub_ticket_sk = sat.hub_ticket_sk
            and @AsAt between sat.load_datetime and coalesce(sat.load_end_datetime,getutcdate())
                --Load_datetime and load_end_datetime are UTC values 
)

查询的期望形式是什么,因为转换仅需要执行一次,而无需为每个记录执行一次。

ALTER FUNCTION dbo.fn_Ticket_AsAt
(
    @AsAt datetime      --Local Time for User Confort
,   declare @dv datetime = dbo.AdjustLocaltoUtc(@AsAt)

)
RETURNS TABLE 
AS 
RETURN
(
    Select * 
    from dvr.hub_ticket hub
    join dvr.sat_ticket sat
        on hub.hub_ticket_sk = sat.hub_ticket_sk
            and @dv between sat.load_datetime and coalesce(sat.load_end_datetime,getutcdate())
                --Load_datetime and load_end_datetime are UTC values 
)

0 个答案:

没有答案