2010-02-07 2 views
1

Использование SQL Server 2005Вставка значений с условием

Когда я вставляю дату, она должна сравнивать дату в таблице.

Если оно совпадает с другой датой, оно должно отображать сообщение об ошибке, а также должно допускать только вставку следующей даты.

Для примера

Table1

Date 

20091201 
20091202 

Insert into table1 values('20091202') 

Этот запрос не должен допускать, чтобы вставить то же значение

Insert into table1 values('20091204') 

приведенный выше запрос также не должен допускать, чтобы вставить длинную дату зазора.

Запрос должен содержать только следующую дату. Он не должен допускать такую ​​же дату и длинную дату.

Как вставить запрос с этим условием.

возможно в SQL или VB.Net

Нужна SQL Query или VB.Net код Помощь

+4

Непонятно, что вы хотите, пытаетесь ли вы подтвердить ввод данных или хотите, чтобы в качестве столбца таблицы была указана дата «auto-increment»? – Hogan

+0

Да Я хочу проверить вход, если он равен или больше (означает, что он должен допускать только следующую дату). Это не должно быть все длительные промежутки времени. – Gopal

ответ

1

Вы можете использовать пункт where, чтобы гарантировать, что в предыдущий день присутствует в таблице, и ток день не является:

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. в противном случае возвращается ошибка в VB с помощью raiserror.

+0

Как это предотвратить, чтобы текущая дата была вставлена ​​дважды? Я предполагаю, что вы предполагаете, что на столе уже есть уникальное ограничение (хотя вопрос, казалось, подразумевает, что его нет). –

+0

@Aaron Bertrand: Правильно, я добавлю дополнительную проверку для этого, также будет работать уникальное ограничение – Andomar

+0

. Уникальное ограничение лучше, потому что трудно обеспечить, чтобы все, добавляющие в эту таблицу, использовали этот конкретный запрос для этого. –

0

Похоже, что ваше поле даты должно быть unique с auto-increment.

+2

SQL-эквивалент 'auto-increment' является' identity', и, насколько я знаю, он поддерживает только дискретные числовые типы – Andomar

+0

@Andomar: поле с автоматической добавочной датой было бы глупо. Какое значение имели бы даты? – Aaronaught

1

Почему бы не просто установить таблицу дат заранее и обновить строку после того, как вы захотите «вставить» эту дату?

Я не уверен, что я понимаю смысл вставлять новую дату только один раз и никогда не позволять пробелу. Не могли бы вы описать свою деловую проблему чуть подробнее?

Конечно, вы можете использовать столбец IDENTITY, а затем иметь вычисленный столбец или представление, которое вычисляет дату из числа дней с (какая-то дата). Но столбцы IDENTITY не гарантируют соприкосновения, и они даже не гарантируют уникальность самостоятельно (если только вы не настроили ограничение отдельно).

Предотвращение дубликатов должно выполняться на уровне таблицы с уникальным ограничением, а не с запросом. Сначала вы можете проверить дубликаты, чтобы вы могли обрабатывать ошибки по-своему (а не позволять движку вызывать для вас исключение), но это не должно быть вашей единственной проверкой.

Смежные вопросы