1

選択した日付までにデータを取得する必要があります。重要な詳細が 1 つあります。ユーザーは、2 つの日を次々に選択できます。その後、いくつかの日をスキップして、別の日を選択できます。

選択した日付をストアド プロシージャに渡し、そのような日付範囲でフィルターを整理する最良の方法は何ですか?

たとえば、次の構造のテーブルがあります。

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 に 2 つの列がFromDateありToDate、明確な定義があると仮定します。

于 2012-10-17T12:40:03.780 に答える