Brad正确地使用了一个表变量,但没有使用循环。只需要
从具有硬编码的单个"Between"的存储过程开始,如下所示
Select *
From Booking
Where
FromDate Between CONVERT(datetime, '1/5/2019') And CONVERT(datetime, '1/7/2020')
我想将startDate/EndDate对的集合传递给存储过程,其中每对生成一个新的Between,
类似于:
Where
FromDate Between @startDate1 And @endDate1
Or FromDate Between @startDate2 And @endDate2
Or FromDate Between @startDate3 And @endDate3
我想知道是否要传入一个双分隔字符串(我知道这很可怕(,然后使用string_split首先生成该对,然后再次使用string_split将该对拆分为两个日期。这感觉真的不对。
我想我必须向存储过程传递一个(或两个(字符串,然后以某种方式将值放入临时表中,然后使用该表为每个表行添加一个"Between"。
请给我指正确的方向
JOIN
。不过你必须先创建一个TYPE
。这样的东西应该有效(它未经测试,因为我们没有样本数据(:
CREATE TYPE dbo.DateRange AS table (Startdate date, EndDate date);
GO
CREATE PROC dbo.YourProc @DateRanges dbo.DateRange READONLY AS
BEGIN
SELECT B.* --Replace this with the actual columns
FROM dbo.Bookings B
JOIN @DateRanges DR ON B.FromDate BETWEEN DR.Startdate AND DR.EndDate;
END;
GO
DECLARE @DateRanges dbo.DateRange;
INSERT INTO @DateRanges
VALUES('20200101','20200103'),
('20200107','20200107');
EXEC dbo.YourProc @DateRanges;
GO