2010-02-07 4 views
1

SQL Server 2005 사용조건을 사용하여 값 삽입

날짜를 삽입 할 때 테이블의 날짜를 비교해야합니다.

다른 날짜와 같으면 오류 메시지가 표시되고 다음 날짜 만 삽입해야합니다.

는 표

Date 

20091201 
20091202 

Insert into table1 values('20091202') 

위한 상기 질의는 동일한 값 위의 쿼리는 긴 갭 기간을 삽입하는 것을 허용하지 말아야

Insert into table1 values('20091204') 

을 삽입하도록 허용해서는 안된다.

쿼리는 다음 날짜 만 허용해야합니다. 동일한 날짜 및 긴 간격 날짜를 허용하면 안됩니다.

이 조건으로 쿼리를 삽입하는 방법.

는 SQL 또는 VB.Net에서 가능한

당신은 전날 테이블에 있는지 확인하기 위해 where 절을 사용하고, 현재 수 SQL 쿼리 또는 VB.Net 코드 도움말

+4

원하는 내용이 확실하지 않거나 입력의 유효성을 검사하려고합니까, 아니면 "자동 증가"날짜를 표의 열로 사용 하시겠습니까? – Hogan

+0

예 입력이 같거나 크면 (다음 날짜 만 허용해야 함을 의미) 입력의 유효성을 검사하려고합니다. 모든 긴 격차 날짜가 있어서는 안됩니다. – Gopal

답변

1

필요 날이되지 않습니다 : 삽입이 성공

insert into table1 ([dateColumn]) 
select '20091204' 
where exists (
    select * from table1 where [dateColumn] = dateadd(d,-1,'20091204') 
) 
and not exists (
    select * from table1 where [dateColumn] = '20091204' 
) 

if @@rowcount <> 1 
    raiserror ('Oops', 16, 1) 

경우, @@rowcount은, 그렇지 않으면 1로 설정됩니다 오류가 raiserror를 사용하여 VB로 되돌아 간다.

+0

어떻게하면 현재 날짜가 두 번 삽입되지 않습니까? 나는 당신이 이미 테이블에 유일한 제약이 있다고 가정하고 있다고 생각한다. (질문은 그럴 수 없다는 것을 암시하는 것처럼 보였지만). –

+0

@Aaron Bertrand : 맞습니다. 고유 한 제약 조건도 적용됩니다. – Andomar

+0

고유 한 제약 조건은이 테이블에 삽입되는 모든 사람들이이 특정 쿼리를 사용하도록하는 것이 어렵 기 때문에 더 좋습니다. –

0

날짜 필드와 같은 소리는 uniqueauto-increment이어야합니다.

+2

SQL Server에 상응하는'auto-increment'는'identity'이며, 알고있는 한 이산 숫자 형을 지원합니다. – Andomar

+0

@Andomar : 자동 증가 날짜 필드는 실제로 바보입니다. 날짜에는 어떤 의미가 있습니까? – Aaronaught

1

날짜 테이블을 미리 설정하고 해당 날짜를 "삽입"하기를 원한다면 행을 업데이트하지 않는 이유는 무엇입니까?

나는 한 번만 새 날짜를 삽입하고 간격을 허용하지 않는다는 점을 잘 모르겠다. 비즈니스 문제를 좀 더 자세히 설명해 주시겠습니까?

물론 IDENTITY 열을 사용하고 계산 된 열 또는 날짜 이후의 일 수 (일부 날짜)를 계산하는보기가있을 수 있습니다. 그러나 IDENTITY 열은 연속성을 보장하지 않으며 자체적으로 고유성을 보장하지도 않습니다 (단, 제약 조건을 별도로 설정하지 않은 경우).

중복 방지는 쿼리가 아닌 고유 한 제약 조건을 사용하여 테이블 수준에서 수행해야합니다. 중복 된 부분을 먼저 확인할 수 있으므로 엔진에서 예외를 발생시키는 대신 사용자 고유의 방식으로 오류를 처리 할 수 ​​있습니다.하지만 이는 유일한 검사가 아니어야합니다.