Изменение параметра в табличном значении Функция - Datetime - Локально для UTC - PullRequest
0 голосов
/ 12 октября 2018

Я работаю в хранилище данных типа 2 и в настоящее время работаю над функцией, чтобы попытаться смоделировать куб данных для определенных пользователей, чтобы выполнить быстрое извлечение данных из определенных снимков.

В настоящее время я могу изменить код, чтобы он работал, путем преобразования параметра в объединении (или в предложении where), однако это приводит к снижению производительности на 3 секунды на 100 000 записей.

Для производительности можно выполнить

set @AsAt = dbo.AdjustLocalToUtc(@AsAt)

где-то перед оператором return или pehaps в самом начале.

Блок кода - работает, если передано значение 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 
)
...