1

我需要按选定日期检索数据。有一个主要的细节:用户可以连续选择两天,然后可以跳过一些天,然后再选择另一个。

将选定日期传递到存储过程并按此类日期范围组织过滤器的最佳方法是什么?

例如,我有具有以下结构的表:

CREATE TABLE [dbo].[Events](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [EventDate] [datetime] NOT NULL,
    [Amount] [float] NOT NULL,
 CONSTRAINT [PK_Events] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

使用以下数据:

INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-01-01 10:00', 12)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-01-01 11:00', 154)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-01-01 12:00', 4)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-02-01 10:00', 132)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-02-01 11:00', 212)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-03-01 10:00', 712)
INSERT [dbo].[Events] ([EventDate], [Amount]) VALUES ('2012-03-01 20:00', 892)

用户想要检索事件日期为 2012-01-01 10:00 和 2012-01-01 11:00,从 2012-03-01 09:00 到 2012-03-01 19:00 等的数据。

用户可以选择不同的间隔计数。

4

1 回答 1

2

如果您想将多个“相同”参数发送到存储过程,这通常表明您应该使用表值参数(TVP)。

在存储过程中,您可以将 TVP 视为表变量,因此您的查询如下所示:

SELECT
    *
FROM
    Events e
        inner join
    @MyTVP t
        on
            e.EventDate between t.FromDate and t.ToDate

假设您的 TVP 有两列,FromDate并且ToDate具有明显的定义。

于 2012-10-17T12:40:03.780 回答