Вставка значений с условием - PullRequest
1 голос
/ 07 февраля 2010

Использование SQL Server 2005

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

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

Например

Table1

Date 

20091201
20091202

Insert into table1 values('20091202')

Приведенный выше запрос не должен позволять вставлять одно и то же значение

Insert into table1 values('20091204')

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

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

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

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

Требуется SQL-запрос или код VB.Net Справка

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

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

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

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

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

1 голос
/ 07 февраля 2010

Вы можете использовать предложение 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 голосов
/ 07 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...