插入带条件的值

时间:2010-02-07 13:58:25

标签: sql-server vb.net

使用SQL Server 2005

当我插入日期时,它应该比较表格中的日期。

如果它与其他日期相同,则应显示错误消息,并且只允许插入下一个日期。

例如

表1

Date 

20091201
20091202

Insert into table1 values('20091202')

上述查询不应允许插入相同的值

Insert into table1 values('20091204')

上述查询也不应允许插入长间隔日期。

查询应该只允许下一个日期。 它不应该允许相同的日期和较长的间隙日期。

如何使用此条件插入查询。

在SQL或VB.Net中是可能的

需要SQL查询或VB.Net代码帮助

3 个答案:

答案 0 :(得分: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.否则,使用raiserror将错误返回给VB。

答案 1 :(得分:1)

为什么不预先设置日期表,并在想要“插入”该日期后更新一行?

我不确定我是否理解只插入一次新日期,并且从不允许存在差距。您能更详细地描述一下您的业务问题吗?

当然,您可以使用IDENTITY列,然后使用计算列或视图,根据自某个日期以来的天数计算日期。但是IDENTITY列不保证连续性,甚至也不保证它们的唯一性(除非你单独设置一个约束)。

防止重复应该在表级别使用唯一约束而不是查询来完成。您可以先检查重复项,以便以自己的方式处理错误(而不是让引擎为您引发异常),但这不应该是您唯一的检查。

答案 2 :(得分:0)

听起来您的日期字段应为unique auto-increment