Я пытаюсь реорганизовать некоторый код на веб-сайте ASP.Net и у меня возникла проблема с хранимой процедурой, которую я пишу.
То, что я хочу сделать, это получить диапазон дат, а затем выбрать все данные в этом диапазоне из таблицы, НО, если дата не указана, мне все равно нужно выбрать строку.
Моя идея для этого, как вы можете видеть в приведенном ниже коде, состоит в том, чтобы создать временную таблицу и заполнить ее всеми датами в моем диапазоне дат, а затем соединить это с таблицей, из которой я выбираю, однако это не работает. Я что-то здесь не так делаю? Столбец tempDate всегда равен нулю в этом соединении, однако я проверил таблицу, и в ней определенно содержатся данные.
-- Parameters
DECLARE @DutyDate datetime='2012-01-01 00:00:00'
DECLARE @InstructorID nvarchar(2) = N'29'
DECLARE @datesTBL TABLE (tempDate DATETIME)
-- Variables
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SELECT
@StartDate =StartDate,
@EndDate = EndDate
FROM
DutyPeriodTbl
WHERE
(StartDate <= @DutyDate)
AND
(EndDate >= @DutyDate)
DECLARE @d DATETIME = @StartDate
WHILE @d<=@EndDate
BEGIN
INSERT INTO @datesTBL VALUES (CONVERT(DATETIME, @d, 102))
SET @d=DATEADD(day,1,@d)
END
SELECT
dt.tempDate ,
InstructorID, EventStart,
EventEnd, cancelled,
cancelledInstructor,
EventType, DevName,
Room, SimLocation,
ClassLocation, Event,
Duration, TrainingDesc,
Crew, Notes,
LastAmended, InstLastAmended,
ChangeAcknowledged, Type,
OtherType, OtherTypeDesc,
CourseType
FROM
OpsInstructorEventsView iv
LEFT OUTER JOIN
@datesTBL dt
ON
CONVERT(DATETIME, iv.EventStart, 102) = CONVERT(DATETIME, dt.tempDate, 102)
WHERE
InstructorID = @InstructorID
AND
EventStart BETWEEN CONVERT(DATETIME, @StartDate, 102) AND CONVERT(DATETIME, @EndDate, 102)
ORDER BY
EventStart