У меня есть следующая хранимая процедура, которая принимает идентификатор пользователя, дату начала, дату окончания и список кодов в списке, разделенном запятыми, и возвращает все записи активности между этими двумя датами, которые соответствуют одной из коды в списке.
ALTER PROCEDURE [dbo].[ActivitiesSummary]
@UserID varchar(30),
@StartDate datetime,
@EndDate datetime,
@Codes varchar(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT act.SectionID, act.UnitID, act.ActivityCode
FROM dbo.Activities act INNER JOIN ConvertCodeListToTbl(@Codes) i ON act.ActivityCode = i.code
WHERE act.ActivityDate>=@Startdate AND act.ActivityDate<@EndDate
GROUP BY act.SectionID, act.UnitID, act.ActivityCode
ORDER BY act.SectionID, act.UnitID, act.ActivityCode
END
ConvertCodeListToTbl (@Codes) - это функция, которая принимает список кодов, разделенных запятыми (например, «A0001, B0001, C0001») и возвращает таблицу с одним кодом на строку:
A0001
B0001
C0001
Этот метод работает очень хорошо, за исключением случаев, когда коды не были выбраны. Когда это происходит, я не получаю никаких записей назад, потому что @ Codes = '' и последнее INNER JOIN не возвращает никаких записей.
То, что я хочу, чтобы произошло: если @ Codes = '', игнорировать последнее INNER JOIN или иным образом найти способ вернуть все записи независимо от кода.
Какие у меня варианты?