我正在使用SQL 2008 Developer Edition和Sql2005兼容模式下的DB构建ASP.Net/MVC应用程序。使用实体框架作为DAL。
我的问题是,我有一个表,我正在使用整数标识列,就像一个发票号,也就是说,它总是必须是唯一的,永远不会重复使用。因此,如果没有大量工作,使用GUID列类型将无法工作。
我所看到的是,DB正在填补标识列中的空白。这将导致我长期的问题。是否有设置禁用此“填写”
答案 0 :(得分:3)
这听起来像SQL服务器之外的东西; SQL服务器不会“返回”并重新使用身份中的间隙,除非表已被重新接种,但即使这样,它也会盲目地逐个递增,并且可能会返回大量重复键错误,因为它会触及具有现有值的行。
您确定该列是标识吗?在创建行时是否还有其他可能重新分配密钥和/或启用标识插入的内容?
答案 1 :(得分:1)
默认情况下,SQL Server不填写标识字段的间隙,只会在插入行时继续增加数字。
可以将身份重置为1,因此您可以看到您所描述的内容。
我是否可以建议您发布一些显示问题的代码/数据库结构,并搜索您执行身份重新设置的任何代码。
答案 2 :(得分:0)
除非我没有正确理解你的问题。如果您在标识列或唯一约束上创建主键,则可以避免出现重复值。
例如:
create table TableName
(
InvoiceID int identity(1,1) not null primary key
)