2009-09-25 41 views
2

我正在使用SQL 2008 Developer Edition和Sql2005兼容模式下的数据库构建ASP.Net/MVC应用程序。使用实体框架作为DAL。填充标识列值的MS-SQL

我的问题是,我有一个表,我在一个像发票号一样使用整数标识列,也就是说,它总是必须是唯一的,永远不会重复使用。因此,使用GUID列类型将无法付诸实践。

我所看到的是数据库填补了身份专栏中的空白。这会导致我长期的问题。是否有一个设置来禁用此“填充”

回答

1

默认情况下,SQL Server不会填充标识字段的空白,因为插入行时它只会继续向上。

可以将标识重置为1,因此您可以看到您所描述的内容。

我可以建议你发布一些代码/数据库结构,显示你的问题,并搜索你可能有的任何代码,我的执行身份种子。

+0

这是我的想法,但看着在数据库中的数据,它肯定不像。但在阅读了所有人的评论之后,我回过头去重新验证了一些事情,并且它工作正常。谢谢。 – 2009-09-25 21:28:44

3

这听起来像SQL服务器之外的东西; SQL服务器不会“回去”并重新使用标识中的间隔,除非该表已被重新调入,但即使如此,它也会一个接一个地盲目递增,并且可能会返回大量重复键错误,因为它会使用现有值访问行。

您确定该列是身份吗?在创建行时是否还有其他可能重新分配键和/或打开标识插入的内容?

+0

+1为是快速:) – 2009-09-25 13:20:54

0

除非我不能正确理解你的问题。如果您在标识列或唯一约束上创建主键,则可以避免重复值问题。

例如:

create table TableName 
(
    InvoiceID int identity(1,1) not null primary key 
)