使用SQL Server 2005
当我插入日期时,它应该比较表格中的日期。
如果它与其他日期相同,则应显示错误消息,并且只允许插入下一个日期。
例如
表1
Date
20091201
20091202
Insert into table1 values('20091202')
上述查询不应允许插入相同的值
Insert into table1 values('20091204')
上述查询也不应允许插入长间隔日期。
查询应该只允许下一个日期。 它不应该允许相同的日期和较长的间隙日期。
如何使用此条件插入查询。
在SQL或VB.Net中是可能的
需要SQL查询或VB.Net代码帮助
答案 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
。