0

指定された日付範囲がテーブル内の日付範囲のリストと重複しているかどうかを確認するストアド プロシージャを作成する必要があります。

元)

データベース: SQL Server 2008 R2

SP Input: 2012-12-17 18:30:00.000       2012-12-19 18:29:59.000

SP Output(Out parameter): True/False

予約テーブルのサンプル データ:

FromDate                    ToDate

2012-12-11 18:30:00.000     2012-12-12 18:29:59.000
2012-12-12 18:30:00.000     2012-12-13 18:29:59.000
2012-12-10 18:30:00.000     2012-12-11 18:29:59.000
2012-12-18 18:30:00.000     2012-12-19 18:29:59.000
2012-12-23 18:30:00.000     2012-12-28 18:29:59.000
2012-12-17 18:30:00.000     2012-12-18 18:29:59.000
2012-12-19 18:30:00.000     2012-12-22 18:29:59.000
2012-12-16 18:30:00.000     2012-12-17 18:29:59.000
2012-12-13 18:30:00.000     2012-12-14 18:29:59.000
2012-12-11 23:00:00.000     2012-12-12 22:59:59.000

ストアド プロシージャ:

USE [BookingDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[FindConflict]    
    @FromDate datetime,
    @ToDate datetime,
    @IsConflict bit OUT
AS

BEGIN

?????????????????????(what to write here)

END

SQL:

USE [BookingDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BookingAdmin](
    [PK_BookingAdmin] [int] IDENTITY(1000,1) NOT NULL,
    [FromDate] [datetime] NOT NULL,
    [ToDate] [datetime] NOT NULL,
 CONSTRAINT [PK_BookingAdmin] PRIMARY KEY CLUSTERED 
(
    [PK_BookingAdmin] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[BookingAdmin] ON
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1048, CAST(0x0000A1240130DEE0 AS DateTime), CAST(0x0000A1250130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1049, CAST(0x0000A1250130DEE0 AS DateTime), CAST(0x0000A1260130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1050, CAST(0x0000A1230130DEE0 AS DateTime), CAST(0x0000A1240130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1051, CAST(0x0000A12B0130DEE0 AS DateTime), CAST(0x0000A12C0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1052, CAST(0x0000A1300130DEE0 AS DateTime), CAST(0x0000A1350130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1053, CAST(0x0000A12A0130DEE0 AS DateTime), CAST(0x0000A12B0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1055, CAST(0x0000A12C0130DEE0 AS DateTime), CAST(0x0000A12F0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1056, CAST(0x0000A1290130DEE0 AS DateTime), CAST(0x0000A12A0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1057, CAST(0x0000A1260130DEE0 AS DateTime), CAST(0x0000A1270130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1058, CAST(0x0000A124017B0740 AS DateTime), CAST(0x0000A125017B0614 AS DateTime))
GO


CREATE PROCEDURE [dbo].[FindConflict]    
    @FromDate datetime,
    @ToDate datetime,
    @IsConflict bit OUT
AS
BEGIN
    if exists (select * from BookingAdmin where FromDate = @ToDate and ToDate = @FromDate)
        set @IsConflict = 1   
    else
        set @IsConflict = 0        
END
4

1 に答える 1

1

私があなたのニーズを正しく理解していて、テーブルにまったく同じ範囲があるかどうかを確認する必要がある場合は、これを試すことができます

USE [BookingDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[FindConflict]    
    @FromDate datetime,
    @ToDate datetime,
    @IsConflict bit OUT
AS
BEGIN
    if exists (select * from <your table> where FromDate = @FromDate and ToDate = @ToDate)
        set @IsConflict = 1   
    else
        set @IsConflict = 0
END

重複する範囲について知りたい場合は更新してください、これを試してください

 ...
    if exists (select * from <your table> where FromDate <= @ToDate and ToDate >= @FromDate)
        set @IsConflict = 1   
    else
        set @IsConflict = 0
 ...

SQLフィドルの例

于 2012-12-12T10:05:53.190 に答える