2012-12-12 2 views
0

주어진 날짜 범위가 이고 테이블의 날짜 범위 목록에이 중복되는지 확인하려면 저장 프로 시저를 작성해야합니다.주어진 날짜 범위가 SQL Server 저장 프로 시저의 날짜 범위 목록에 있는지 여부를 찾는 방법은 무엇입니까?

예)

데이터베이스 : SQL 서버 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 

답변

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 FIDDLE EXAMPLE

+0

답장을 보내 주셔서 감사합니다. 그러나 주어진 날짜 범위가 데이터베이스의 날짜 범위 목록과 중복되는지 여부를 알아야합니다. –

+0

님이 –

+0

고마워했습니다. 그러나 작동하지 않습니다 : ( –

관련 문제