당신이 찾고있는 무엇을 실현하려 두 가지 방법이 있습니다 MS SQL 서버를 사용하고 있습니다. 트리거는 INSERT/UPDATE에 해당하며 날짜 범위를 확인하고 새 값을 추가하거나 오류를 발생시킵니다.
2) 당신은 ItemTable에 복합 기본 키를 사용할 수 있습니다
CREATE TABLE [dbo].[ItemTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[HeaderRef] [int] NOT NULL,
[SLRef] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[HeaderRef] ASC,
[SLRef] 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
지금이 headerRef 및 SLRef INT 값 (키)의 중복 조합을 허용하지 않습니다 ItemTable 및 SQL Server에 제약을 둘 것이다.
돌아 가기 당신은 당신의 HeaderTable, 당신은 이제 시작 및 종료 날짜 HeaderTable에 고유 인덱스를 생성 시작과 종료 날짜
CREATE TABLE [dbo].[HeaderTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[STARTDATE] [datetime] not NULL,
[ENDDATE] [datetime] not NULL,
CONSTRAINT [PK_HeaderTable] 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]
GO
의 범위를 중복 중지 고유 제한 조건을 넣을 수 있습니다.
/****** Object: Index [IX_HeaderTable] Script Date: 03/13/2017 12:24:51 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_HeaderTable] ON [dbo].[HeaderTable]
(
[ENDDATE] ASC,
[STARTDATE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
HeaderTable에 또 다른 제약 조건을 추가하여 시작 날짜가 종료 날짜보다 이전인지 여부를 확인할 수 있습니다.
ALTER TABLE [dbo].[HeaderTable] WITH CHECK ADD CONSTRAINT [CheckEndLaterThanStart] CHECK (([ENDDATE]>=[STARTDATE]))
GO
ALTER TABLE [dbo].[HeaderTable] CHECK CONSTRAINT [CheckEndLaterThanStart]
GO
희망이 있습니다.
삽입/업데이트 트리거를 사용해 보셨습니까? 쓸 수 있습니다. – pwas
ItemTable에서 headerRef 및 SLRef를 고유하게 유지 하시겠습니까? –
예 Hedar에 추가 된 날짜 범위에서 headerRef 및 SLRef를 고유하게 유지하려고합니다. –