Как обойти параметр даты в SQL Серверная хранимая процедура для возврата всех данных - PullRequest
1 голос
/ 29 января 2020

В настоящее время я использую хранимую процедуру getShifts, чтобы получить данные для 2 отдельных функций на внешнем интерфейсе. Моей хранимой процедуре требуется параметр Selected Date, который при передаче даты возвращает записи на указанную дату c.

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

BEGIN
    SELECT 
        n.ID, n.ID, m.SearchFullNameFL as ProfileName, n.SchedID, 
        s.LicenseID, f.ID as UnitID, f.UnitName, 
        n.Hours, s.ShiftDate, s.SchedShiftID, ss.Description as SchedShift,  
        ss.Hours as SchedShiftHours, t.ID as TransactionTypeId,
        (SELECT COUNT(b.ID) 
         FROM Sched b
         INNER JOIN Ref_SchedShift ss ON ss.ID = b.SchedShiftID AND ss.DSN > 0
         WHERE b.ExpiredBy = 0 AND b.ShiftDate = @ShiftDate -->= @StartDate 
           AND b.EndDate <= @EndDate
           AND b.FacUnitID IN (SELECT Id FROM FacUnit 
                               WHERE FacilityID = @FacilityID) 
           AND b.ID = s.ID) AS ShiftsWorked,
        n.OverTimeReasonTypeID, n.Comment, n.Ref_NoLunchID as NoLunchID, 
        nl.NoLunchType
    FROM
        NewClockIns n
    INNER JOIN 
        Members m ON m.ID = n.ID
    INNER JOIN 
        Sched s ON s.ID = n.SchedID AND s.ExpiredBy = 0
    INNER JOIN 
        Ref_Method rm ON n.Ref_MethodID = rm.ID
    INNER JOIN 
        Ref_ClockTransactionType t ON t.ID = n.Ref_ClockTransID
    INNER JOIN 
        FacUnit f ON f.ID = n.FacUnitID
    INNER JOIN 
        Ref_License l ON l.ID = s.LicenseID
    INNER JOIN 
        Ref_SchedShift ss ON ss.Id = s.SchedShiftID
    LEFT JOIN 
        Ref_NoLunch nl ON nl.ID = n.Ref_NoLunchID
    WHERE  
        s.ShiftDate = @ShiftDate-->= @StartDate 
        AND s.EndDate <= @EndDate 
        AND s.ClockInsAgencyApprovedByID > 0 
        AND ((@IsApproved = 1 AND s.ClockInsFacilityApprovedByID > 0) 
             OR 
             (@IsApproved = 0 AND s.ClockInsFacilityApprovedByID = 0)) 
        AND f.Id IN (SELECT ID FROM @UnitIDList) 
        AND n.ExpiredBy = 0
END

Ответы [ 2 ]

1 голос
/ 29 января 2020

Вы ищете or?

(s.ShiftDate = @ShiftDate or @ShiftDate is null)

Затем можно ввести NULL и фильтр игнорируется.

0 голосов
/ 29 января 2020

Попробуйте это: -

ShiftDate =(Case When @IsApproved = 1 Then @ShiftDate Else null End)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...